如何将参数从一个窗体传递到另一个窗体

本文关键字:窗体 一个 另一个 参数 | 更新日期: 2023-09-27 18:19:32

我的程序有一个主窗体,我在其中保存其他子窗体的值存储库。由于某种原因,子表单给了我一个错误:

非静态场需要一个对象参考

这是我的主要表格:

public partial class frm_SystemLog : Form
{
    public frm_SystemLog()
    {
        InitializeComponent();
    }
    public string TextBoxValue
    {
        // suppose to get value from other forms
        get { return this.textBox1.Text; }
        set { textBox1.Text = value; }
    }   
    private void frm_SystemLog_Load(object sender, EventArgs e)
    {
        Log frm_LoginMenu = new Log();
        frm_LoginMenu.ShowDialog();
    }
}

这是我的子表格:

public partial class Log : Form
{
    public Log()
    {
        InitializeComponent();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        // this is where the error happens
        frm_SystemLog.TextBoxValue = "SomeValue";
        this.Close();
    }
}

如何将参数从一个窗体传递到另一个窗体

您应该在日志表单中创建一个属性,然后在访问时设置其值

//in log form 
public String MyValue{get;set;}

然后在日志表单的按钮2的属性中,选择dialogresult并将其设置为ok然后在你的按钮2点击事件

 private void button2_Click(object sender, EventArgs e)
    {
        MyValue = "SomeValue";
        //no need to close ,dialogresult will do it...
    }

然后在frm_SystemLog表单中执行此

private void frm_SystemLog_Load(object sender, EventArgs e)
    {
        Log frm_LoginMenu = new Log();
        frm_LoginMenu.ShowDialog();
        if(frm_LoginMenu.ShowDialog() == DialogResult.OK)
        {
            this.TextBoxValue = frm_LoginMenu.MyValue;
        }
    }

这应该能解决你的问题。

frm_SystemLog.TextBoxValue不能从button2_Click访问,因为它在不同的类中。

当前您正在尝试引用父窗体类上的对象,而不是类的实例。在这种情况下,您只能引用静态对象,因此会出现错误。

您需要一个对父窗体实例的实际引用。按如下方式更改Log类:

public partial class Log : Form
{
    private frm_SystemLog parentForm;
    public Log(frm_SystemLog parentForm)
    {
        InitializeComponent();
        this.parentForm = parentForm;
    }
    ...
    ...

然后使用实例化您的子表单

Log frm_LoginMenu = new Log(this);

读取";理解C#中的类、方法和属性;获取更多信息,特别是:

C#中有两种方法。它们是:

  • 实例方法
  • 静态方法

实例方法是在主方法之外声明的方法,只能通过创建相应类的对象来访问。

类方法也在主方法之外声明,但可以在不创建类的对象的情况下访问。它们应该用关键字static声明,并且可以使用classname.methodname语法进行访问。