使用从form1到form2的方法

时间:2014-06-04 10:02:46

标签: c# winforms

我在使用从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");
    }

我无法弄清楚如何解决这个问题。

3 个答案:

答案 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");
}