我在使用从form2到form1的方法时遇到问题。错误是“对象引用未设置为对象的实例”。我无法弄清楚我做错了什么。我还是表格编程的初学者,我很难过。
这是我在form1中的代码:
// showing form2 and pass the value of the _handle
private void sendMessageToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (ListViewItem item in listView1.SelectedItems)
{
int _handle = (int)item.Tag;
sf = new SendForm(_handle);
sf.Show();
}
}
// sending message using socket
public void sendT(int _handle, string msg)
{
byte[] sdata = Encoding.ASCII.GetBytes(msg);
serverSocket[_handle].Send(sdata, 0, sdata.Length, 0);
}
这是我的form2代码:
Main m = new Main();
int handle;
public SendForm(int handle)
{
InitializeComponent();
this.handle = handle;
}
private void button1_Click(object sender, EventArgs e)
{
m.sendT(handle, "msgbox||test message||warning");
}
我无法弄清楚如何解决这个问题。
答案 0 :(得分:0)
我可以看到你正在尝试在sendT
的新实例上执行方法Main
,所以你可能需要像这样修改
ode in form1:
// showing form2 and pass the value of the _handle
private void sendMessageToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (ListViewItem item in listView1.SelectedItems)
{
int _handle = (int)item.Tag;
sf = new SendForm(_handle, this);
sf.Show();
}
}
// sending message using socket
public void sendT(int _handle, string msg)
{
byte[] sdata = Encoding.ASCII.GetBytes(msg);
serverSocket[_handle].Send(sdata, 0, sdata.Length, 0);
}
form2代码:
Main m;
int handle;
public SendForm(int handle, Main mainForm)
{
InitializeComponent();
this.handle = handle;
this.m=mainForm;
}
private void button1_Click(object sender, EventArgs e)
{
m.sendT(handle, "msgbox||test message||warning");
}
这将解决我能看到的问题
答案 1 :(得分:0)
serverSocket
似乎没有初始化。恕我直言,我建议使用一个单独的类来执行应用程序中屏幕常见的操作。
我没有看到给定代码示例的表单之间真正需要交互,因此不需要发送表单实例。
答案 2 :(得分:0)
所以这是问题所在:Main m = new Main();
这个m只是Main类的一个新实例,与显示SendForm实例的第一个表单无关。稍后你正在调用这个实例的sendT方法,它可能正在使用一些仍然为null的东西。解决这个问题,我认为它会正常工作。
private Main m;
private int handle;
public SendForm(Main mform, int handle)
{
InitializeComponent();
m = mform;
handle = handle;
}
private void button1_Click(object sender, EventArgs e)
{
_form.sendT(handle, "msgbox||test message||warning");
}