我有一個WinForm應用程序。在主窗體上有許多控件,例如標籤,文本框等。C#在另一個類中使用winform控件
如果我在同一個程序集中有另一個類,那麼如何訪問這些控件?
例如,從我的新班級,我想更新Form1中的標籤?
我有一個WinForm應用程序。在主窗體上有許多控件,例如標籤,文本框等。C#在另一個類中使用winform控件
如果我在同一個程序集中有另一個類,那麼如何訪問這些控件?
例如,從我的新班級,我想更新Form1中的標籤?
在標籤(或控制)的特性使「調節器」選項設置爲「公共」
現在你可以從表單的訪問對象的標籤
Form1 f = new Form1()
f.lblMyLabel.Text = "My Text"
一種方法是建立在Form1類中,揭露你想修改
例如,控制公共屬性,如果您的標籤被稱爲LABEL1在設計,那麼你可以做這樣的事情:
public Label MyForm1Label { get { return label1; } }
除了已經提到的解決方案之外,您可以爲您的表單創建一些公共方法,以提供所需的功能(如果某些更改必須在多個控件中顯示,那麼可能會很好 - 其他類不必請記住哪一個要更改)
public void SetSomething(int value)
{
Control1.value = value;
Control2.value = value;
...
}
從另一個類/表單中選擇要訪問的控件。去其屬性,並將其修飾符值設置爲「內部」(如果您只想在同一個程序集中使用它)。
現在在哪裏曾經在同一裝配您想使用它,創建窗體的對象像
myForm objform = new myForm();
objform.txtName.Text="any text";
那麼你可以使用objform.show顯示形式();或objform.showdialog();
,但我想是因爲我的感覺是,你的表格已經顯示在屏幕上,並從另一個窗體/類,你想改變它的標籤/文本框的值 所以對於這一點,你將不得不採取這不會解決你的問題當前形式的對象,否則它不會在當前顯示的形式上顯示任何更改。
所以我認爲單身模式會給你完美的解決方案。 只是創建類,並在該類中創建該表單的靜態對象,並創建一個靜態函數,並檢查對象是否已初始化,不初始化它並使用現有的初始化它。
還有很多其他的解決方案也存在類似通過創建公共財產,但你將不得不使用目前呈現形式的同一對象的引用,看看變化反映到目前呈現形式
以防萬一:你一定要做這在同一個線程上 – smirkingman 2010-11-09 13:09:39
您將首先必須將Form1的引用傳遞給該類。通過這樣的引用,您可以使用其他人建議的方法來公開屬性。 – 2010-11-09 13:17:53
擴展@smirkingman所說的話,如果你要跨線程調用這些方法,你將需要使用Control.Invoke – cordialgerm 2010-11-09 13:44:52