2010-06-01 16 views
0

我有一個簡單的Windows應用程序,我有一個窗口,其中有一些按鈕和標籤以及其他一些類。從另一個類使用C#.NET訪問Windows應用程序對象

我的問題是,我有一些方法,我想在主窗體中更新一些標籤的類。如何從類中直接訪問標籤?

感謝

編輯:一小片的代碼將有助於

回答

0

你可以只發送到包含標籤或引用標籤本身的Form一個參考,但你的代碼鏈接到你的GUI,所以我不會推薦它。相反,我建議在創建事件的類中,在需要更新時引發它們,然後設置Form以偵聽這些事件並根據需要更新GUI。

我假設這些類是「工人」類,其方法以某種方式由Form調用。

2

默認情況下,表格上的標籤是私密的(如果從設計師添加)
一種可能性(不推薦)是將其更改爲公開。
更好的選擇是添加屬性/方法來設置它們的值。

+0

指出,但我卡住了。 我做了以下功能,但仍然無法訪問它: public ToolStripStatusLabel StatusLabel(string newStatus) { tlsStatusLabel.Text = newStatus; return tlsStatusLabel; } – mouthpiec 2010-06-01 12:57:00

+0

@mouthpiec - 聽起來像你有一個'System.Windows.Forms.Form'的實例,但你需要投射到'MyForm'的實例 - 這是你的標籤聲明爲屬性的地方。 – 2010-06-01 13:07:56

0

爲什麼不直接釣魚到表單的控件集合,使用可能的控制ID作爲標識符?如果這些標籤都包含其他容器內(Panel控件,組框控件等)

Form f = [[get your form]]; 
LabelChanger.SetLabelText(f, "lblWhatever", "New Label Text"); 

那麼你將不得不寫一個遞歸搜索 -

public class LabelChanger 
{ 
    public static void SetLabelText(Form form, string labelID, string labelText) 
    { 
    Label lbl = form.Controls["labelID"] as Label; 
    if(lbl != null) 
     lbl.Text = labelText; 
    } 
} 

然後,給出一個形式,你可以這樣做但是,這將是一個好的開始。

1

這對我來說非常困難,而且這裏的帖子也有所幫助。我清盤做的是:

public static ToolStripStatusLabel ts = new ToolStripStatusLabel();  
public Form1() 
{ 
    InitializeComponent(); 
    ts = toolStripStatusLabel1; 

...

然後,我這樣做的任何地方:

ts.Text = "Some Text."; 
Application.DoEvents(); 

我發現,如果我沒有添加的DoEvents()語句,對我來說狀態並沒有經常更新。這對於故障排除非常有幫助!

相關問題