-1

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

非静态字段需要对象引用

这是我的主要形式:

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

3 回答 3

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

    }

这应该可以解决您的问题。

于 2013-06-22T02:13:28.213 回答
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);

阅读“了解 C# 中的类、方法和属性”以获取更多信息,尤其是:

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

  • 实例方法
  • 静态方法

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

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

于 2013-06-22T02:33:59.120 回答
0

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

于 2013-06-22T01:59:44.703 回答