2012-01-06 7 views
0

私はC#を使用してWindowsアプリケーションを作成しています。テキストプロパティまたはコントロールのプロパティを別のフォームから変更する

私はからのXは、コードクラスX.csからこのxがクラスを継承

がFormManager.csが

に共通の機能を制御する(カスタムメソッドと言っている、私はラベルLABEL1を言う持っている、と言っています

すべてのフォームがフォームの読み込みまたはフォームの終了に使用されます)。私は私が

このFormManager.csクラスから変更にLABEL1のラベルテキストを変更したい場所FormManager.csのスレッドが

いくつかの繰り返し作業からを実行するために実行しています。これどうやってするの。

答えて

1
  1. あなたの基本クラスを使用する必要がある可能性が別のスレッドからUIオブジェクトを更新することを忘れないでください。
  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のオブジェクトにアクセスすることができ、派生クラスでこのメソッドを実装することができます。
はあなたのラベルを知らないので、あなたは、基本クラスからあなたのラベルを更新することはできませんInvoke()

関連する問題