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