1

別のクラスでメソッドを呼び出す方法を考え出そうとしています。どちらのクラスも実行時に動的に作成されます。ここで見た問題のほとんどは継承に関連しており、これは私が持っているものとは異なります (私が思うに)。

私はまだ C# にかなり慣れていないので、いくつかの概念をテストしようとしています。

最初のクラスは次のようなものです。

public class Record
{
    CustomPanel _panel;

    public void recordFunc(){}
}

内部で作成されたクラスには次のようなものがあります。

public class CustomPanel : Panel
{
    List<Control> _myControls = new List<Control>;
    // _myControls[0] += new EventHandler(myFunc);

    public void myFunc(object sender, EventArgs e)
    {
        // parentClass.recordFunc();
    }
}

私の目的は、データベース呼び出しから実行時にレコードを作成することです。その時点で、FlowLayoutControl に追加される Panel を (CustomPanel クラスから) 作成します。パネルの内部コントロールからイベントが発生した場合、親 Record クラスの一部を更新する必要があります。

どんな助けでも大歓迎です。

4

2 に答える 2

0

インスタンスに. Record_ _ そのような関係を自分で設定する必要があります。例えばCustomPanelRecordCustomPanel

public class Record
{
    CustomPanel _panel;
    public CustomPanel panel
    {
         get { return _panel; }
         set { _panel = value; _panel.parent = this; }
    }

    public void recordFunc(){}
}

public class CustomPanel : Panel
{
    public Record parent { get; set; }

    public void myFunc(object sender, EventArgs e)
    {
        parent.recordFunc();
    }
}
于 2012-05-03T14:56:28.747 に答える
0

あなたが何を求めているのか100%確信が持てませんが、実行時にクラスタイプがわからないときにクラスで関数を呼び出す方法を知りたいようですが、それは1つまたは複数のレコードタイプである可能性があります. あれは正しいですか?

その場合、上記を明確に実現する方法は、派生型にインターフェイスを実装し、インターフェイス メソッドを呼び出すことです。たとえば、複数の「レコード」クラスがあり、実行時にタイプがわからない場合は、次のことを試してください。

public interface IRecord 
{
    void RecordFunc();
} 

public class ARecord : IRecord
{
    public void RecordFunc()
    {
        Console.WriteLine("ARecord.RecordFunc");
    }
}

public class AnotherRecord : IRecord
{
    public void RecordFunc()
    {
        Console.WriteLine("AnotherRecord.RecordFunc");
    }
}

public class CustomPanel : Panel
{    
    private IRecord _parentRecord;

    // Where parentRecord could be ARecord or AnotherRecord
    public class CustomPanel(IRecord parentRecord)
    {
        _parentRecord = parentRecord;
    }

    public void MyFunc(object sender, EventArgs e)
    {
        _parentRecord.RecordFunc();
    }
}

それがあなたが探しているものでない場合は、明確にしてください。

于 2012-05-03T15:02:47.483 に答える