2017-05-27 12 views
0

Class Tree.csからForm1.csへのインターフェイスコールバック関数を使用しようとしましたが、何も実行しません。ここに私のコードは次のとおりです。Tree.csでC#のコールバック関数がツリークラスで動作しない

機能

public void Print(IOnQuery<T> query,Node<T> node) 
{ 
     if (node == null) node = Top; 
     if (node.Left != null) 
     { 
      Print(query,node.Left); 
      query.GetDataItem(node); 
     } 
     else 
     { 
      query.GetDataItem(node); 
     } 

     if (node.Right != null) 
     { 
      Print(query,node.Right); 
     } 
} 

のForm1.cs

public partial class Form1 : Form, IOnQuery<Car> 
{ 

    public void GetDataItem(Node<Car> node) 
    { 
     listBox1.Items.Add(node.Item.ToString()); 
    } 

} 

マイインターフェイスクラス

public interface IOnQuery<T> 
{ 
    void GetDataItem(Node<T> node); 
} 
+0

ツリーで 'Print'を呼び出しましたか?あなたのコードを表示してください。 – CodingYoshi

答えて

1

GetDataItemが呼び出されるたびにPrintが発生するようにするには、イベントを使用できます。

Form1には、パラメータIOnQuery<T> queryNode<T> nodeを使用して、このようなイベントを作成します。

treeは、あなたのツリーオブジェクトである
OnDataItemGet += tree.Print; 

public event Action<IOnQuery<T>, Node<T>> OnDataItemGet; 

次に、あなたのようなコードでクエリを購読する必要があります。

あなたがする必要があるのは、GetDataItemイベントを発生させることだけです。 あなたはGetDataItemに1行を追加することによってこれを行うことができます。

OnDataItemGet?.Invoke(query, node); 
+0

本当にありがとう!どうもありがとうございます! –

関連する問題