引用子表单中的父表单

时间:2013-04-16 18:16:37

标签: c#

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

* 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
    }
}

此代码位于LogIn表单

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。 我需要参考主表单来处理它并改变一些值。

2 个答案:

答案 0 :(得分:2)

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

LogForm.ShowDialog(parentForm);

答案 1 :(得分: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();
        }
    }
}