我有一个简单的Windows应用程序,我有一个窗口,其中有一些按钮和标签以及其他一些类。从另一个类使用C#.NET访问Windows应用程序对象
我的问题是,我有一些方法,我想在主窗体中更新一些标签的类。如何从类中直接访问标签?
感谢
编辑:一小片的代码将有助于
我有一个简单的Windows应用程序,我有一个窗口,其中有一些按钮和标签以及其他一些类。从另一个类使用C#.NET访问Windows应用程序对象
我的问题是,我有一些方法,我想在主窗体中更新一些标签的类。如何从类中直接访问标签?
感谢
编辑:一小片的代码将有助于
你可以只发送到包含标签或引用标签本身的Form
一个参考,但你的代码链接到你的GUI,所以我不会推荐它。相反,我建议在创建事件的类中,在需要更新时引发它们,然后设置Form
以侦听这些事件并根据需要更新GUI。
我假设这些类是“工人”类,其方法以某种方式由Form
调用。
默认情况下,表格上的标签是私密的(如果从设计师添加)
一种可能性(不推荐)是将其更改为公开。
更好的选择是添加属性/方法来设置它们的值。
为什么不直接钓鱼到表单的控件集合,使用可能的控制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;
}
}
然后,给出一个形式,你可以这样做但是,这将是一个好的开始。
这对我来说非常困难,而且这里的帖子也有所帮助。我清盘做的是:
public static ToolStripStatusLabel ts = new ToolStripStatusLabel();
public Form1()
{
InitializeComponent();
ts = toolStripStatusLabel1;
...
然后,我这样做的任何地方:
ts.Text = "Some Text.";
Application.DoEvents();
我发现,如果我没有添加的DoEvents()语句,对我来说状态并没有经常更新。这对于故障排除非常有帮助!
指出,但我卡住了。 我做了以下功能,但仍然无法访问它: public ToolStripStatusLabel StatusLabel(string newStatus) { tlsStatusLabel.Text = newStatus; return tlsStatusLabel; } – mouthpiec 2010-06-01 12:57:00
@mouthpiec - 听起来像你有一个'System.Windows.Forms.Form'的实例,但你需要投射到'MyForm'的实例 - 这是你的标签声明为属性的地方。 – 2010-06-01 13:07:56