2016-12-28 45 views
1

我有下面的類:C#中獲得價值從類成的MainForm

public class CreateNewWeapon : BaseWeapon 
{ 

    string[] weaponNames = { "Dragonslayer", "SoopaDoopa", "Mastersword" }; 

    private BaseWeapon newWeapon; 

    public void CreateWeapon() 
    { 

     Random rnd = new Random(); 
     int x = rnd.Next(0, weaponNames.Length); 

     newWeapon = new BaseWeapon(); 

     newWeapon.ItemName = weaponNames[x]; 
     newWeapon.Strength = rnd.Next(0, 5); 
     newWeapon.Vitality = rnd.Next(0, 5); 
     newWeapon.Intelligence = rnd.Next(0, 5); 
    } 

} 

,並希望得到我的主要形式的值,在第二種形式的標籤設置是這樣的:

 private void button2_Click(object sender, EventArgs e) 
    { 

     newWep = new Items.CreateNewWeapon(); 

     newWep.CreateWeapon(); 

     ShowWeapon shWep = new ShowWeapon(); 

     shWep.Label6 = newWep.Strength.ToString(); 
     shWep.Visible = true; 
    } 

但是這些值甚至不會轉移到第一個表格,他們在哪裏迷路?

+0

ShowWeapon是一個表單嗎? – Damian

+0

是的,ShowWeapon實際上是一個Form。我試圖保持它的細節:獨立的類不CreateWeapon()方法。 Form1(main)使用自己的類實例調用該函數,並嘗試將ShowWeapon.Label6(set)設置爲該值。但價值已經失去,並始終顯示0. – Smarc

回答

3

有你的代碼中的多個問題:

  1. 私人BaseWeapon newWeapon; 當您將變量聲明爲專用時,它無法通過CreateNewWeapon類以外的任何對象訪問。
  2. public void CreateWeapon()你的方法的返回值是void。你應該把它變成BaseWeapon並返回newWeapon給調用者

我想你應該改變你的代碼如下:

public class CreateNewWeapon : BaseWeapon 
{ 

    string[] weaponNames = { "Dragonslayer", "SoopaDoopa", "Mastersword" }; 

    public BaseWeapon CreateWeapon() 
    { 

     Random rnd = new Random(); 
     int x = rnd.Next(0, weaponNames.Length); 

     var newWeapon = new BaseWeapon(); 

     newWeapon.ItemName = weaponNames[x]; 
     newWeapon.Strength = rnd.Next(0, 5); 
     newWeapon.Vitality = rnd.Next(0, 5); 
     newWeapon.Intelligence = rnd.Next(0, 5); 

     return newWeapon; 
    } 

} 

,並在button2_Click方法,按此方法調用:

var weapon = newWep.CreateWeapon(); 
+0

偉大的,那些工作,非常感謝你! – Smarc

+0

P.S .:什麼是「var」關鍵字實際在做什麼?我第一次看到它。 – Smarc

+0

這是一個隱式類型定義。基本上,因爲你正在創建一個BaseWeapon類型的新實例,編譯器知道你的變量的類型。你可以在這裏閱讀更多關於它的信息:https://msdn.microsoft.com/en-us/library/bb383973.aspx – Sparrow