1

最近、プロジェクトを少し変更して、統合を改善するためのインターフェイスを含めましたが、これは、他のクラスではなく、もともとメイン フォームにあったいくつかのメソッドを移動することを意味していました。インターフェイスから継承しているクラスから、メインフォーム(フォームコントロールの更新に使用される)のメソッドにアクセスする方法に本当にこだわっています。以下は、わかりやすくするためのコードのスニペットです。

まず、フォーム コントロールを変更し、メイン フォームにあるメイン フォームのメソッドを次に示します。

//main form
public partial class BF2300 : Form
{
public void setAlarmColour(byte[] result, int buttonNumber)
    {
        if (result != null)
        {
            this.Invoke((MethodInvoker)delegate
            {

                if (result[4] == 0x00)
                {
                    this.Controls["btn" + buttonNumber].BackColor = Color.Green;
                }
                else
                {
                    this.Controls["btn" + buttonNumber].BackColor = Color.Red;
                }


            });

        }
    }
 }

最後に、これにアクセスする必要がある私のクラス メソッド:

//class which needs to access method in main form

class bf2300deviceimp : IdeviceInterface
{
 public void start(string address, int port, int i)
    {
        if (timer == null)
        {
            timer = new System.Timers.Timer(1000);


            timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { timerElapsed(sender, e, address, port, i); };
        }
        timer.Enabled = true;
        // MessageBox.Show("Thread " + i + " Started.");
    }


    public void timerElapsed(object sender, ElapsedEventArgs e, string address, int port, int i)
    {
        this.newconnect(address, port, i);
    }



   public void newconnect(string address, int port, int buttonNumber)
    {

        try
        {
            byte[] result = this.newSendCommandResult(address, port, bData, 72);

           // needs to access it here.

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

    }
}

アドバイスをいただければ幸いです。どうすればこれを行うことができるのか、私は立ち往生しています。現在のフォームを参照する必要があるため、メイン フォームの新しいインスタンスを単純に作成することはできません。最初は、setAlarmColour をフォームに移動すると、フォーム コントロールにアクセスできるようになると思っていましたが、これは本当ですが、メソッド自体にアクセスできなかったので、本当にうまくいきません。

4

2 に答える 2

0

最良の方法は、イベントを使用することです。それ以外の場合、それが親フォームである場合、uはユーザーにできます

((MainForm)currentform.Parent).SetAlarmColor()

イベント:

 public delegate void SetDelegate(byte[] result, int buttonNumber);
        public event SetDelegate SetAlarmColor;

子クラスでデリゲートとイベントを作成します。

Child child = new Child();

     child.SetAlarmColor += new Child.SetDelegate(child_SetAlarmColor);

子フォームの作成中にそのイベントを使用する

于 2012-05-28T09:57:35.557 に答える
0

setAlarmColourメソッドを静的として宣言しBF2300.SetAlarmMethod、インターフェイスから呼び出すだけです。

于 2012-05-28T13:45:30.967 に答える