2015-07-10 68 views
0

我遇到了從我的主窗體傳遞字符串到名爲unlockForm的另一個窗體的問題。以另一種形式從主窗體獲取字符串的正確方法是什麼? C#

在我的MainForm我創建的每一個串像這樣

public string race 
    { 
     get;set; 
    } 

我一直在試圖從unlockForm訪問它們,而是創造這樣

mainForm mainScreen = new mainForm(); 
unlockRace = mainform.race; 

一個新的MainForm給了我一個StackOverflowException第一行是未處理的錯誤。

我在主窗體中創建新窗體時沒有遇到這個問題,所以我想知道正確的方法是什麼。

編輯:

這裏是整個代碼通過@deathismyfriend

的要求這是MainForm的構造

public mainForm() 
    { 
     InitializeComponent(); 
    } 

這是在更新比賽串MainForm中的代碼。

public string race 
    { 
     get;set; 
    } 


private void raceUpdate(object sender, EventArgs e) 
    { 

     if (raceBox.Text == "Human") 
     { 
      if (infoText != humanText) 
      { 
       infoText = humanText; 

       infoboxUpdate(sender, e); 
      } 
     } 
     else if (raceBox.Text == "Troll") 
     { 
      if (infoText != trollText) 
      { 
       infoText = trollText; 

       infoboxUpdate(sender, e); 
      } 
     } 

     race = raceBox.Text; 
     if (race == "") 
     { 
      race = "Unspecified"; 
     } 
    } 

這裏是我的unlockForm

public unlockForm() 
    { 
     InitializeComponent(); 
     getStats(); 
    } 

    mainForm mainScreen = new mainForm(); 

    private void getStats() 
    { 
     race = mainScreen.race; 
    } 

編輯#2的代碼:

即使當我做我的unlockForm以下代碼

public unlockForm() 
    { 
     InitializeComponent(); 
     //getStats(); 
    } 

    mainForm mainScreen = new mainForm(); 

我仍然收到錯誤

+0

你永遠不調用它之前設置的比賽。 – deathismyfriend

+0

即使我刪除了呼叫競賽,我仍然收到錯誤 – Fuzzyketchup

+0

您需要在調用它之前設置mainform.race。 – deathismyfriend

回答

2

有兩種方法 1:

UnlockForm.cs

private string _race; 
public UnlockForm(string race) 
{ 
_race = race; 
} 

MainForm.cs

private void LuanchUnlockForm() 
{ 
var unlockForm = new UnlockForm("Human"); 
unlockForm.ShowDialog(); 
} 

第二個辦法:

UnlockForm.cs

​​

MainForm.cs

private void LuanchUnlockForm() 
{ 
var unlockForm = new UnlockForm(this); 
unlockForm.ShowDialog(); 
} 

如果你想發送多個字符串做以下

創建新類就像是

Human.cs

public class Human 
     { 
      public string Name { get; set; } 
      public int Age { get; set; } 
      public string Address { get; set; } 
      // or anything you want 
     } 
現在

UnlockForm.cs

private Human _human; 
public UnlockForm(Human human) 
{ 
    _human= human; 
} 
private void GetHumanAttributes() 
{ 
    var age = _human.Age; 
    //and others ... 
} 

MainForm.cs

private void LuanchUnlockForm() 
{ 
var human = new Human(); 
human.Name = "name"; 
human.Age = 19; 
// others 
var unlockForm = new UnlockForm(human); 
unlockForm.ShowDialog(); 
} 
+0

做了一些修補,但我終於得到這個工作!非常感謝所有的幫助! – Fuzzyketchup

相關問題