我最近稍微更改了我的项目以包含一个接口以更好地集成,但这意味着要移动一些最初位于主窗体上的方法而不是其他类。我真的很困惑如何从继承自我的界面的类中访问我的主表单(用于更新表单控件)上的方法。下面是一些应该有助于清晰的代码片段。
首先,这是我在主窗体上的方法,它更改窗体控件并位于我的主窗体上。
//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 移动到表单中可以让我可以访问表单控件,这是真的,但后来我无法访问该方法本身,所以我真的没有更好的情况。