我目前有兩種形式; Form1和Form2。 Form1用於我的clickergame,在那裏我有一個叫「錢」的雙。 我需要從Form2訪問此值。我已經設置了雙「錢」公開,我已經調用Form1中:VS C#從一個表單獲取數據到另一個表單
Form1 mainform = new WindowsFormsApplication3.Form1();
即使我這樣做,我沒有收到值,當我做mainform.money 什麼我可不可以做錯了嗎?
我目前有兩種形式; Form1和Form2。 Form1用於我的clickergame,在那裏我有一個叫「錢」的雙。 我需要從Form2訪問此值。我已經設置了雙「錢」公開,我已經調用Form1中:VS C#從一個表單獲取數據到另一個表單
Form1 mainform = new WindowsFormsApplication3.Form1();
即使我這樣做,我沒有收到值,當我做mainform.money 什麼我可不可以做錯了嗎?
,我建議你在兩種形式寫的可變貨幣:
// Form1
private Form2 frm2 = new Form2();
public double money = 0;
private void changeMoney()
{
frm2.money = /* value */;
this.money = /* value */;
}
// Use this method to change money from form1
// Form2
private Form1 frm1 = new Form1();
public double money = 0;
private void changeMoney()
{
frm1.money = /* value */;
this.money = /* value */;
}
// Use this method to change money from form1
另一種選擇是創建一個靜態類是這樣的:
public static class values
{
public static double money = 0;
}
// From the form1 or form2, you can change the money like this:
values.money = /* value */; // set money
var x = values.money; // get money
我希望這個答案幫助你, Gerry
像你的第一個例子重複代碼通常是不好的,應該避免。 – dotTutorials
第二個選項很好,謝謝! –
遞歸創建這樣的實例是一個壞主意......至於靜態字段,它們本質上是全局狀態。這經常導致代碼由於具有太多(不可見)依賴性而難以維護。更好的解決方案是明確傳遞依賴關係:如果'Form2'需要顯示一些數據,則通過其構造函數傳遞該數據。在這種情況下,您可以將它傳遞給Form1引用,但最好將UI與實際的數據和邏輯分開,所以兩種形式都可以使用的GameState類仍然更好。 –
將變量從一種形式暴露給世界其他地方並不是一個好習慣。您應該將變量封裝/隱藏在只讀訪問或方法的屬性中,傳遞值作爲構造函數參數等。 示例下面的示例使用注入構造函數進行只讀屬性訪問。
方法一使用構造器注入
// Form1
private double _money = 0;
_money = 100;
Form2 frm2 = new Form2(money);
//Form2
private double _money = 0;
public Form2(double money)
{
_money = money;
}
方法2使用只讀的getter訪問
// Form1
public double Money {get;private set;}
//Form2
Form1 frm1 = new Form1();
private double _money = 0;
_money = frm1.Money;
但你實例化Form1上,而不是窗體2 –
我在很新這個,你在乎解釋嗎? –
https://stackoverflow.com/questions/1665533/communicate-between-two-windows-forms-in-c-sharp –