我正在学习C#,遇到了一个有趣的问题。我有一个定义为public的类变量,并且在我的类中实例化了表单的新实例,并访问它始终为null的public变量的值。
为进一步解释我的问题-此语法会打印适当的值
System.Diagnostics.Debug.WriteLine(tboxvalue.ToString());
但是,此语法始终输出0
System.Diagnostics.Debug.WriteLine(f1.tboxvalue.ToString());
如何更改语法,以便将正确的值传递给类Functions
?
public partial class Form1 : Form
{
public double tboxvalue;
private string exportdata;
public Form1()
{
InitializeComponent();
}
private void btnClicker_Click(object sender, EventArgs e)
{
Functions.EE();
}
private void txtData_CheckedChanged(object sender, EventArgs e)
{
bool @checked = ((CheckBox)sender).Checked;
if (@checked.ToString() == "True")
{
exportdata = "Yes";
tboxvalue = Convert.ToDouble(this.txtData.Text);
System.Diagnostics.Debug.WriteLine(tboxvalue.ToString());
}
else
exportdata = "No";
}
}
class Functions
{
public static void EE()
{
Form1 f1 = new Form1();
System.Diagnostics.Debug.WriteLine(f1.tboxvalue.ToString());
}
}
答案 0 :(得分:0)
要访问表单的属性,您需要更改两件事。首先,您必须将form
传递给'EE'
方法,然后才能访问表单的属性。其次,不要在“ EE”方法中创建新表单。
public partial class Form1 : Form
{
public double tboxvalue;
private string exportdata;
public Form1()
{
InitializeComponent();
}
private void btnClicker_Click(object sender, EventArgs e)
{
Functions.EE(this);
}
private void txtData_CheckedChanged(object sender, EventArgs e)
{
bool @checked = ((CheckBox)sender).Checked;
if (@checked.ToString() == "True")
{
exportdata = "Yes";
tboxvalue = Convert.ToDouble(this.txtData.Text);
System.Diagnostics.Debug.WriteLine(tboxvalue.ToString());
}
else
exportdata = "No";
}
}
class Functions
{
public static void EE(Form1 f1)
{
System.Diagnostics.Debug.WriteLine(f1.tboxvalue.ToString());
}
}
答案 1 :(得分:0)
如果我理解您的问题,那么我想当您单击btnClicker按钮时会重新创建具有自己的文本框或标签的Form1。您可以在创建表单对象的地方重新分配它。
答案 2 :(得分:0)
您可以将静态Form1对象和Setter例程添加到Functions类:
private static Form1 _form;
public static void SetForm(Form1 form)
{
_form = form;
}
并将表单传递给Form_Load事件中的类,然后在表单上单击两次:
private void Form1_Load(object sender, EventArgs e)
{
Functions.SetForm(this);
}
然后您可以使用对象_form在Functions类中使用该表单
祝你好运!