2010-11-09 105 views
5

我有一個WinForm應用程序。在主窗體上有許多控件,例如標籤,文本框等。C#在另一個類中使用winform控件

如果我在同一個程序集中有另一個類,那麼如何訪問這些控件?

例如,從我的新班級,我想更新Form1中的標籤?

+1

以防萬一:你一定要做這在同一個線程上 – smirkingman 2010-11-09 13:09:39

+0

您將首先必須將Form1的引用傳遞給該類。通過這樣的引用,您可以使用其他人建議的方法來公開屬性。 – 2010-11-09 13:17:53

+0

擴展@smirkingman所說的話,如果你要跨線程調用這些方法,你將需要使用Control.Invoke – cordialgerm 2010-11-09 13:44:52

回答

7

在標籤(或控制)的特性使「調節器」選項設置爲「公共」

現在你可以從表單的訪問對象的標籤

Form1 f = new Form1() 
f.lblMyLabel.Text = "My Text" 
2

一種方法是建立在Form1類中,揭露你想修改

例如,控制公共屬性,如果您的標籤被稱爲LABEL1在設計,那麼你可以做這樣的事情:

public Label MyForm1Label { get { return label1; } } 
1

除了已經提到的解決方案之外,您可以爲您的表單創建一些公共方法,以提供所需的功能(如果某些更改必須在多個控件中顯示,那麼可能會很好 - 其他類不必請記住哪一個要更改)

public void SetSomething(int value) 
{ 
    Control1.value = value; 
    Control2.value = value; 
    ... 
} 
3

從另一個類/表單中選擇要訪問的控件。去其屬性,並將其修飾符值設置爲「內部」(如果您只想在同一個程序集中使用它)。

現在在哪裏曾經在同一裝配您想使用它,創建窗體的對象像

myForm objform = new myForm(); 
objform.txtName.Text="any text"; 

那麼你可以使用objform.show顯示形式();或objform.showdialog();

,但我想是因爲我的感覺是,你的表格已經顯示在屏幕上,並從另一個窗體/類,你想改變它的標籤/文本框的值 所以對於這一點,你將不得不採取這不會解決你的問題當前形式的對象,否則它不會在當前顯示的形式上顯示任何更改。

所以我認爲單身模式會給你完美的解決方案。 只是創建類,並在該類中創建該表單的靜態對象,並創建一個靜態函數,並檢查對象是否已初始化,不初始化它並使用現有的初始化它。

還有很多其他的解決方案也存在類似通過創建公共財產,但你將不得不使用目前呈現形式的同一對象的引用,看看變化反映到目前呈現形式

相關問題