两个表单之间的静态变量和文本框

时间:2012-02-28 23:02:50

标签: c# winforms

我有这样的想法,即使用静态变量在两个表单之间使用MSVS 2010传输数据。

我现在遇到的问题是它的工作方式。 Form2是我的主要用户交互屏幕,其中项目被扫描并显示到文本框中。当我使用Form4时,我希望能够在Form2上的文本框中减去一个项目并显示该描述,而不会删除Form2屏幕上的先前数据。

以下是我在form4中使用的示例代码:

        else if (input_txtBox.Text == "E007C02A55EF937C")
        {
            secondForm.textBox2.Text = "Snickers Bar.................-$0.99" + Environment.NewLine;
            input_txtBox.Text = ""; // clears textBox1
            input_txtBox.Text = "";
            Form2.Subtotal = Form2.Subtotal - Form2.Candy_Bar;
            Form2.Tax = Form2.Candy_Bar * Form2.Taxrate - Form2.Tax;

这是在点击按钮后:

        Form2.Total = Form2.Subtotal + Form2.Tax;
        secondForm.textBox3.Text = Form2.Subtotal.ToString("#0.00");
        secondForm.textBox4.Text = Form2.Tax.ToString("#0.00");
        secondForm.textBox5.Text = Form2.Total.ToString("#0.00");

Form4中使用的变量在Form2中声明为公共静态小数。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

  

我有这样的想法,即使用静态变量在两个表单之间使用MSVS 2010传输数据。

为什么呢?这听起来像Form2Form4(两者都应该被赋予真实的名称,表明其目的)应该引用另一个 - 或者两者都应该有对公共数据模型的引用,该模型负责适当地传输数据。

使用静态字段作为避免正确的OO设计的方法绝对是一个坏主意 - 它会在短期内节省您的时间,但会导致代码难以理解,难以测试,并且搞砸了很快你想到也许你想要两个 Form2的实例,每个实例都与Form4的实例相关联......

答案 1 :(得分:0)

运行一个单独的后台线程作为表单的控件会好得多,这样你就可以使用在后台运行的线程来控制所有变量并根据需要打开表单。 / p>

您需要设置委托方法以允许线程和表单之间的安全访问,但它比您建议的方式更有效,更容易。

希望有所帮助。