2012-04-03 13 views
2

初心者質問。変数が変更されたときにイベントを生成し、コードクラスからフォームクラスcに送信します。#

コードクラス(CodeClassなど)とフォームクラス(FormClassなど)の2つのクラスがあります。 CodeClassには、クラス内の文字列を定期的に更新するために使用するいくつかの関数があります(プロパティなどを使用できます)。この文字列値が変更されたときに他のクラスに通知する何らかの方法が必要です。つまり、FormClassを購読して文字列メッセージのイベントを変更してから、その値をテキストボックスなどに印刷しようとします。しかし、将来的にはCodeClassからAPI関数を提供する必要があります - 基本的には、文字列メッセージ内のサブスクライブするクラスに通知する方法が必要です(文字列メッセージはではありません。はCodeClassの外に変更されます) CodeClass内の関数内で)。イベントやデリゲートなどで試してみましたが、これらはすべて文字列メッセージ(プロパティ)を変更する外部クラスによって実装されているようです。 FormClass

class CodeClass : INotifyPropertyChanged 
{ 

    private string _myProperty; 
    public string MyProperty 
    { 
     get { return _myProperty; } 
     set 
     { 
      _myProperty = value; 
      OnPropertyChanged("MyProperty"); 
     } 
    } 

    #region INotifyPropertyChanged implementation 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion 

} 

、あなたがこのようなPropertyChangedイベントをサブスクライブすることができます:あなたはINotifyPropertyChangedインタフェースを実装する必要があり

よろしく、など

+0

サイドノート、オブジェクトの機能に基づいてコントロールを更新するには、多くのコードを追加せずにすべてを行うDataBindingコントロールがあります。 – Alexandre

答えて

5

codeClass.PropertyChanged += codeClass_PropertyChanged; 

... 

void codeClass_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName = "MyProperty") 
    { 
     ... 
    } 
} 
+0

優秀、これは完璧に動作します - 多くの感謝:) – ftl25

0

ちょうどイベントを作成します文字列が変更されたときにそのイベントを発生させます。

public class CodeClass 
{ 
    private string _someString; 
    public string SomeString 
    { 
     get { return _someString; } 
     set 
     { 
      _someString = value; 
      if (SomeStringChanged != null) { SomeStringChanged(value) } 
     } 
    } 
    public event Action<string> SomeStringChanged; 
} 

注:これを行うための標準的な方法として、INotifyPropertyChangedインターフェイスが使用されています。これは主にWPFとSilverlightで使用されますが、Windowsフォームで使用できない理由はありません。

関連する問題