从另一个表单调用函数c#

时间:2017-03-11 22:41:20

标签: 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");
    }
}

所以,当我点击一个按钮我想调用该函数但它说它不包含它的定义时,我也试图改变主表单上的'Connected'变量,只需引用FrmMain即可。我能够使用mainForm.Connected = true吗?

如果我将函数更改为public static,它将通过引用FrmMain来工作,但随后我得到txtConsoleLog的错误,因为我无法以非静态方法或类似的方式引用对象,任何帮助都是适用的

2 个答案:

答案 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上的所有公共属性。