2012-02-28 12 views
0

我有這個想法使用靜態變量來使用MSVS 2010靜態變量和文本形式之間2

我有現在它正在工作方式問題兩種形式之間傳輸數據。 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; 

這是按鈕點擊後:在Form4使用

 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"); 

的變量聲明在窗體2的公共靜態小數。

任何想法?

+0

好吧,我想我發現我有問題。當我離開Form2時,它隱藏它並刪除數據,所以當Form4關閉時,它只是將數據添加到Form2的文本框中。有沒有辦法將所有數據保存到文本框中的字符串並記住它? – ajaustin12 2012-02-29 00:23:09

回答

2

我有這個想法使用靜態變量傳遞兩種形式之間數據使用MSVS 2010

爲什麼呢?這聽起來像是Form2Form4(兩者都應該被賦予真實的名稱表明它們的目的)應該引用另一個 - 或者,兩者都應該引用負責傳輸數據的公共數據模型適當。

使用靜態字段作爲避免正確的面向對象設計的一種方法絕對是一個壞主意 - 它會在短期內節省您的時間,但會導致代碼難以遵循,難以測試並且無法使用只要你認爲你可能想要兩個兩個 Form2的實例,每個實例都使用Form4的實例...

+0

我是C#的新手,並且自我教導,所以這是除了文本框數據被擦除之外,我發現工作到目前爲止的一種方式。 – ajaustin12 2012-02-28 23:07:23

+0

@ ajaustin12:在早期就教好自己良好的面向對象的習慣,這樣你就不會陷入壞習慣。靜態變量通常是設計氣味。並不總是,但經常。查看UI的各種OO設計,尤其是MVVM,如果你能夠使用WPF或Silverlight。 – 2012-02-28 23:14:42

0

如果運行一個單獨的後臺線程作爲窗體的控件,有了這個,你可以使用後臺運行的線程來控制所有的變量,並根據需要打開窗體。

您需要設置委託方法以允許在線程和表單之間進行安全訪問,但它會比您建議的方式更加高效和容易。

希望有所幫助。

+0

如果我對C#更有經驗,這將有所幫助。不幸的是,我正在教導自己,所以我不熟悉如何做到這一點。 – ajaustin12 2012-02-28 23:20:04

+0

一個很好的選擇是看看黃皮書來幫助自學C#。 http://www.robmiles.com/c-yellow-book/ – jwddixon 2012-02-29 00:01:03