从子窗体引用父窗体
本文关键字:窗体 引用 | 更新日期: 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();
}
}
}