2010-06-01 35 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()语句,对我来说状态并没有经常更新。这对于故障排除非常有帮助!

相关问题