我有一个主窗体,其中的函数可以更改主窗体上文本框的文本,代码如下:
主要表格功能:
public void consoleLog(string message)
{
txtConsoleLog.Text += Environment.NewLine;
txtConsoleLog.Text += message;
txtConsoleLog.SelectionStart = txtConsoleLog.TextLength;
txtConsoleLog.ScrollToCaret();
txtConsoleLog.Refresh();
}
所以现在我打开一个名为frm connect的新表单,当我点击这样一个按钮时:
private void connectToolStripMenuItem_Click(object sender, EventArgs e)
{
Form frmConnect = new FrmConnect(this);
frmConnect.Show();
}
这是下面的frmConnect
public partial class FrmConnect : Form
{
private Form mainForm;
public FrmConnect(Form frmMain)
{
this.mainForm = frmMain;
InitializeComponent();
}
private void btnConnect_Click(object sender, EventArgs e)
{
FrmMain.Connected = true;
mainForm.consoleLog("Connected");
}
}
所以,当我点击一个按钮我想调用该函数但它说它不包含它的定义时,我也试图改变主表单上的'Connected'变量,只需引用FrmMain即可。我能够使用mainForm.Connected = true吗?
如果我将函数更改为public static,它将通过引用FrmMain来工作,但随后我得到txtConsoleLog的错误,因为我无法以非静态方法或类似的方式引用对象,任何帮助都是适用的
答案 0 :(得分:1)
当您将表单传递给构造函数并将其存储为私有成员变量时,在两个位置都声明它为基类型Form
。为了对您定义的类型使用方法,您的参数和变量应为FrmMain
类型。
public partial class FrmConnect : Form
{
private FrmMain mainForm;
public FrmConnect(FrmMain frmMain)
{
this.mainForm = frmMain;
InitializeComponent();
}
private void btnConnect_Click(object sender, EventArgs e)
{
FrmMain.Connected = true;
mainForm.consoleLog("Connected");
}
}
答案 1 :(得分:0)
你应该改变
private Form mainForm;
public FrmConnect(Form frmMain)
{
要
private FrmMain mainForm;
public FrmConnect(FrmMain frmMain)
{
稍后将允许您访问FrmMain
类中其他方法中FrmConnect
上的所有公共属性。