如何将参数从1种形式传递到另一种形式?

时间:2013-06-22 01:57:31

标签: c# .net

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

  

非静态字段

需要对象引用

这是我的主要形式:

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();
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

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

 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;
        }

    }

这可以解决你的问题。

答案 1 :(得分:0)

frm_SystemLog.TextBoxValue无法从button2_Click访问,因为它位于不同的类中。

答案 2 :(得分:0)

目前,您尝试引用父表单类上的对象,而不是类的实例。在这种情况下,您可以引用的唯一对象是静态对象,因此您将获得错误。

您需要实际引用父表单的实例。按如下方式更改您的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);

阅读"Understanding Classes, Methods, and Properties in C#"以获取更多信息,特别是:

  

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

     
      
  • 实例方法
  •   
  • 静态方法
  •   
     

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

     

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