将Windows窗体中的文本框值传递给类

时间:2018-09-29 18:47:26

标签: c# winforms

我正在学习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());
    }
}

3 个答案:

答案 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类中使用该表单
祝你好运!