从另一个表单更改文本属性或任何控件属性

时间:2012-01-06 10:14:51

标签: c# windows winforms

我正在使用c#处理Windows应用程序。

我有一个说X,其中我有一个标签说label1,来自代码类X.cs的这个x是

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

上的常用功能)

表单加载或表单关闭时的所有表单。我在FormManager.cs上运行一个线程来执行

一些重复的任务,我想从哪里更改label1的标签文本从

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

2 个答案:

答案 0 :(得分:1)

  1. 您的基类不了解您的标签,因此您无法从基类更新标签。
  2. 如果您正在运行后台线程来更新UI,那么您必须Invoke以便UI更新将在UI线程中执行。这是一个实现示例:
  3. 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"; };
        }
    }
    

答案 1 :(得分:0)

基类无法看到子属性 但是你可以在基类上使用

abstract void UpdateLabel();

在您的线程中调用它,然后在派生类中实现此方法,您可以在其中访问Label1对象 请记住,要从其他线程更新UI对象,您可能需要使用Invoke()