2012-01-06 72 views
0

我正在使用c#的Windows应用程序。从另一种形式更改文本属性或控件的任何属性

我有一个从说X,其中我有一个标签说LABEL1,这从代码级X.cs x是

继承类说FormManager.cs(自定义的方法来控制

通用的功能

表格载入或窗体关闭的所有表单)。我运行在一个FormManager.cs线程来执行

一些重复的任务,并从那里我想回到label1的标签文本从

这FormManager.cs类改改。我怎样才能做到这一点。

回答

1
  1. 你的基类不知道你的标签,所以你不能更新从基类标签。
  2. 如果您正在运行后台线程来更新UI,那么您将不得不Invoke,以便UI更新将在UI线程中执行。下面是一个实现的例子:

FormManager形式:

public partial class FormManager : Form 
{ 
    public FormManager() 
    { 
     InitializeComponent(); 
    } 

    public Action BackgroundActionCompleted { get; set; } 

    public void OnBackgroundActionCompleted() 
    { 
     if (this.BackgroundActionCompleted != null) 
     { 
      // Invoke so the action will be launched on the UI thread 
      this.Invoke(this.BackgroundActionCompleted); 
     } 
    } 
} 

X形式:

public partial class X : FormManager 
{ 
    public X() 
    { 
     InitializeComponent(); 
    } 

    private void X_Load(object sender, EventArgs e) 
    { 
     this.BackgroundActionCompleted = delegate() { this.label2.Text = "New Text"; }; 
    } 
} 
0

基类无法看到子属性。
但是你可以在你的线程上的基类

abstract void UpdateLabel(); 

调用它,然后实现在派生类中这个方法,你可以访问Label1的对象。
记住,从不同的线程更新UI对象,你可以需要使用Invoke()