2009-04-04 12 views

Répondre

15

Sélectionnez votre bouton dans le concepteur, accédez à ses propriétés et modifiez la propriété "Modificateurs" de Privé.

Ensuite, vous pouvez y avoir accès d'une autre classe, quelque chose comme ceci:

public static class Test 
{ 
    public static void DisalbeMyButton() 
    { 
     var form = Form.ActiveForm as Form1; 

     if (form != null) 
     { 
      form.MyButton.Enabled = false; 
     } 
    } 
} 

Note: il est juste un exemple et certainement pas un modèle pour une bonne conception :-)

+1

throw new StackOverflowException(); ;) –

+0

http://pastebin.com/m183c1bcf Il lance une erreur, j'ai marqué où l'erreur est placée. Ne fonctionne pas. –

+0

Vous avez modifié votre réponse, j'ai déjà essayé. Quand j'essaie d'écrire "Form1.MyButton", il ne le reconnaît pas. –

6

Je me inquiète chaque fois J'entends quelqu'un parler d'un "autre fichier .cs" ou d'un "autre fichier .vb". Cela indique souvent (mais pas toujours) un manque de compréhension de la programmation, du moins de la programmation OO. Qu'est-ce que dans les fichiers? Une classe? Deux?

Vous n'essayez pas d'accéder à ces choses d'un autre fichier, vous essayez d'y accéder à partir d'une méthode d'une classe, ou éventuellement d'un module en VB.

La réponse à votre question dépendra de la nature de la classe et de la méthode à partir desquelles vous essayez d'accéder à ces éléments, et de la raison pour laquelle vous souhaitez y accéder. Une fois que vous avez modifié votre question pour inclure cette information, les réponses que vous recevrez vous montreront probablement que vous ne devriez pas accéder à ces parties privées du formulaire dans des classes autres que la classe de formulaire elle-même.

+3

+1 Je soupçonne que le problème va beaucoup plus loin que la simple visibilité des propriétés. – tvanfosson

1

Bien que je sois d'accord avec John Saunders, une chose que vous faites peut-être mal, en supposant que vous avez tout accessible par les modificateurs publics, est que vous n'avez pas l'instance de cette forme.

Par exemple, voici comment vous le faire:

Form1 myForm = new Form1; 
string theButtonTextIAmLookingFor = myForm.MyButton.Text; 

Je suppose que vous pouvez essayer d'y accéder comme il est statique, comme ceci:

string theButtonTextIAmLookingFor = Form1.MyButton.Text; 

Juste quelque chose que vous pourrait vouloir vérifier.

5

Il est un objet formulaire déjà instanciés dans Program.cs, sauf qu'il n'a pas de référence.Avec l'édition simple, vous pouvez activer

Application.Run(new Form1()); 

à

Application.Run(formInstance = new Form1()); 

déclarer comme

public static Form1 formInstance; 

et utiliser

Program.formInstance.MyFunction(params); 
+0

J'aime cette méthode, elle rend la forme de haut niveau toujours disponible. J'avais des problèmes avec ActiveForm ciblant la mauvaise forme (Incorrect du point de vue de mes codes, juste selon toute la logique conventionnelle.) – Khainestar

Questions connexes