0

我有一个 MainForm,我在其中打开另一个表单,现在我有一个类,它为我提供了一些我编写的函数一个函数获取主表单的引用以及打开的表单和其他参数的引用我在打开的表单中调用函数并引用 MainForm 我使用 this.Parent 但我收到错误“对象引用未在对象的实例上设置”。

*ClientSide 是我的 MainForm *LogIn 是我在 mainform 中打开的表单,我在其中调用 RunListener 方法

class ServicesProvider
{
 public static void RunListener(ClientSide MainForm,LogIn LogForm,System.Net.Sockets.TcpClient Client)
    {
     //Doing my things with the parameters
    }
}

此代码在登录表单中

private void BtLogIn_Click(object sender, EventArgs e)
    {
     Thread Listener = new Thread(delegate()
                 {
                   ServicesProvider.RunListener((ClientSide)this.Parent,this,tcpClient);
                 });
                Listener.Start();
    }

问题是,每当我调试时,我都会收到我告诉你的错误,我发现代码“(ClinetSide)this.parent”指的是null。我需要参考主表单才能对其进行处理并更改一些值。

4

2 回答 2

2

默认情况下,表单不知道“父级”,您必须告诉它。例如:

LogForm.ShowDialog(parentForm);
于 2013-04-16T18:26:22.780 回答
0

假设 Form1=Parent

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace childform
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 tempDialog = new Form2(this);
            tempDialog.ShowDialog();
        }

        public void msgme()
        {
            MessageBox.Show("Parent Function Called");
        }

    }
}

和 Form2=Child

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace childform
{
    public partial class Form2 : Form
    {
        private Form1 m_parent;

        public Form2(Form1 frm1)
        {
            InitializeComponent();
            m_parent = frm1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_parent.msgme();
        }
    }
}
于 2013-04-16T18:29:34.180 回答