[英]Calling a function from another form c#
我有一个带有功能的主窗体,该函数可以更改在主窗体上的文本框的文本,代码如下:
主要形式功能:
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");
}
}
因此,当我单击一个按钮时,我想调用该函数,但它说它不包含其定义,我也试图通过仅引用FrmMain来更改主窗体上的“ Connected”变量,但我能够使用mainForm.Connected = true做到这一点?
如果我将函数更改为public static,它将通过引用FrmMain起作用,但是由于我无法以非静态方法或类似的方式引用对象,因此txtConsoleLog会出现错误。
当您将表单传递给构造函数并将其存储为私有成员变量时,在两个地方都将其声明为基本类型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");
}
}
你应该改变
private Form mainForm;
public FrmConnect(Form frmMain)
{
至
private FrmMain mainForm;
public FrmConnect(FrmMain frmMain)
{
稍后,您将可以通过FrmConnect
类中的其他方法访问FrmMain
上的所有公共属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.