我的程序有一个主窗体,我保存其他子窗体的值存储库。由于某种原因,子表格给我一个错误:
非静态字段
需要对象引用
这是我的主要形式:
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();
}
}
答案 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语法进行访问。