2010-12-13 74 views
1

我正在以編程方式向winform添加一個按鈕,並希望這是公開的。我看不到任何選項以編程方式進行設置。c#winform控件訪問修飾符

有人知道嗎?

感謝

+0

你如何編程添加呢?您是在設計時還是運行時添加它? – 2010-12-13 15:04:13

回答

2

如果你把它添加到一個表格有問題,你需要自己將其暴露

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

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

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

非常好....完美的作品。謝謝。 – 2010-12-13 15:13:11

+0

這不行,應該是「InitializeComponent();」不是「InitializeComponenents();」。 – Cokegod 2010-12-13 15:58:05

+1

我不知道你寫的「有問題」的事實意味着什麼:) – Ran 2010-12-14 16:16:01

0

你似乎添加一個按鈕到窗體,並添加一個成員的一類之間已經混淆。或者,也許只是沒有清楚地問這個問題。

如果通過「添加一個按鈕,一個WinForm程序」,你的意思是,你有代碼Form,做一樣的東西:

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

那麼有沒有這樣的東西使它public,因爲新的按鈕不是你的表單類的成員。

無論如何,建議不要將按鈕公開爲表單的公共屬性,因爲這會打破錶單的抽象並暴露內部實現。通過屬性和方法暴露所需的功能更好,但避免將按鈕本身公開。

+0

如果您將按鈕拖到VS設計時編輯器中的窗體中,它將作爲私有成員var存儲在* .Designer.cs文件中;私有System.Windows.Forms.Button button1;如果您在Form .Controls有一個引用這個Button是私人的,他希望它是公開的,因爲你可以在VS編輯器的Modifiers屬性中更改它 – 2010-12-13 15:17:31

+1

@Aaron:我知道,但是「編程」部分在哪裏?當某人說他是以編程的方式添加一個按鈕,這通常意味着通過運行時代碼,而不是通過設計時的UI ... – Ran 2010-12-13 15:31:07

+0

是的,它確實意味着通過代碼在運行時...他想做什麼,你可以在設計時間在VS編輯器通過更改編輯器中暴露的「Modifiers」屬性;這就是爲什麼我更深入地提供VS解釋,因爲我的猜測是OP想要模仿該行爲 – 2010-12-14 15:00:06

0

做這樣的事情:

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這不會使myOwnButto n可在myOwnForm之外公開訪問 – 2010-12-13 15:18:37

+0

爲什麼?我已經嘗試過,它的工作... – Cokegod 2010-12-13 15:30:32

+0

是的,這將工作;但是將所有按鈕創建爲類級別變量並不是非常動態的;也可以在VS編輯器中添加它們並隱藏它們。除非回答被編輯,否則我無法刪除我的downvote;否則我會... – 2010-12-14 14:57:29