从子窗体引用父窗体

本文关键字:窗体 引用 | 更新日期: 2023-09-27 18:09:26

我有一个MainForm,我打开另一个形式,现在我有一个类,为我提供了一些函数,我写了一个函数得到主形式的引用和打开的形式和其他参数的引用,我在打开的形式中调用函数,并引用MainForm我使用这个。父对象,但我得到错误"对象引用未设置在一个对象的实例"。

*ClientSide是我的MainForm*LogIn是我在主表单中打开的表单,在这里我调用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)这。Parent"指null。我需要参考的主要形式,以便在它上工作,并改变一些值。

从子窗体引用父窗体

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

LogForm.ShowDialog(parentForm);

假设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 =孩子

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();
        }
    }
}