繁体   English   中英

从另一种形式调用函数C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM