2010-12-13 6 views
1

J'ajoute un bouton à un winform par programmation et souhaite que ce soit public. Je ne vois aucune option pour définir cela par programme.C# winform control access modiers

Est-ce que quelqu'un sait comment?

Merci

+0

Comment gagnez-vous ce programme? Est-ce que vous l'ajoutez au moment du design, ou de l'exécution? –

Répondre

2

Si vous ajoutez à une forme problématiquement vous devez exposer vous

public class MyForm : Form 
{ 
    public MyForm() 
    { 
    InitializeComponenents(); 

    MyButton = new Button { Text = "GO" } ; 
    this.Controls.Add(MyButton); 
    } 

    public Button MyButton { get; private set; } 
} 
+0

Excellent .... cela fonctionne parfaitement. Merci. –

+0

Cela ne fonctionnera pas, il devrait être "InitializeComponent();" pas "InitializeComponenents();". – Cokegod

+1

Je me demande si le fait que vous avez écrit "problématiquement" signifie quelque chose :) – Ran

0

Vous semblez avoir confondu entre l'ajout d'un bouton à un formulaire, et l'ajout d'un membre à une classe . Ou peut-être juste n'a pas posé la question assez clairement.

Si par « l'ajout d'un bouton à un WinForm programme », que vous vouliez dire que vous avez un Form avec le code qui fait quelque chose comme:

var b = new Button(); 
this.Controls.Add(b); 

alors il n'y a pas une telle chose comme ce qui en fait public, parce que le le nouveau bouton n'est pas membre de votre classe de formulaire. En tout cas, il n'est pas recommandé d'exposer les boutons en tant que propriétés publiques d'un formulaire, car cela casse l'abstraction du formulaire et expose l'implémentation interne. Il est préférable d'exposer la fonctionnalité requise à travers les propriétés et méthodes, mais évitez de rendre le bouton public.

+0

Si vous faites glisser un bouton dans un formulaire dans l'éditeur de temps de conception VS, il sera stocké en tant que membre privé var dans le fichier * .Designer.cs, privé System.Windows.Forms.Button button1; Si vous regardez dans le formulaire .Controls il a une référence à ce bouton qui est privé.Il le veut public comme vous le changeriez dans la propriété Modificateurs dans l'éditeur VS –

+1

@Aaron: Je sais, mais où vient la partie "par programmation"? dit qu'il ajoute un bouton par programmation, ce qui signifie généralement par le code en cours d'exécution.Pas à travers l'interface utilisateur en temps de conception ... – Ran

+0

Oui, cela signifie par le code à l'exécution ... il voulait faire ce que vous pouvez faire au moment du design dans le VS éditeur en changeant la propriété "Modificateurs" qui est exposée dans l'éditeur, ce qui explique pourquoi je fournissais l'explication de VS plus en profondeur comme je devinais que l'OP voulait imiter ce comportement –

0

quelque chose comme ça:

public class myOwnForm : Form 
{ 
    public Button myOwnButton; 
    public myOwnForm() 
    { 
    InitializeComponent(); 
    myOwnButton = new Button(); 
    myOwnButton.Text = "Click Me!"; 
    myOwnButton.Size = new Size(50,50); 
    myOwnButton.Location = new Point(100,100); 
    Controls.Add(myOwnButton); 
    } 
} 
+0

-1 Cela ne fera pas le myOwnButto n accessible au public en dehors de myOwnForm –

+0

Pourquoi? J'ai essayé cela et cela a fonctionné ... – Cokegod

+0

Oui cela fonctionnera; Cependant, créer tous vos boutons en tant que variables de niveau classe n'est pas très dynamique; pourrait aussi bien les ajouter dans l'éditeur VS et les cacher. Je suis incapable de supprimer mon downvote sauf si la réponse est éditée; sinon je voudrais ... –