2016-12-14 4 views
0

私はC#プログラミングにはかなり新しいので、おそらく超悪い間違いを許してください。私はSuperAdventure.csでコンボボックス(cboWeapons)を持っていると私は、次のボタンを経由して第二の形式(InventoryScreen.cs)のレベルからそれを変更するように見えるカント:なぜ私は別のフォームの観点からコンボボックスのSelectedIndexを変更できないのですか?

private void btnEquipWeapon_Click(object sender, EventArgs e) 
{ 
    SuperAdventure weapon = new SuperAdventure(); 
    String CurrentWeapon = this.cboCurrentWeapon.GetItemText(this.cboCurrentWeapon.SelectedItem); 
    weapon.cboWeapons_SelectedItemChange(CurrentWeapon); 
} 

そして、ここではSuperAdventureからcboWeapons_SelectedItemChange方法であります.csファイル:

public void cboWeapons_SelectedItemChange(string weapon) 
{ 
    cboWeapons.SelectedIndex = cboWeapons.FindString(weapon); 
} 

cboWeaponsコンボボックスには、データバインドされているが、私はそれが、この場合の違いのあまりをすることはないだろうと考えていますか?また、私はちょうどでSuperAdventureの形で行われたテストボタン使用してそれを変更することができました:

private void btnChange(object sender, EventArgs e) 
{ 
    cboWeapons.SelectedIndex = cboWeapons.FindString("Sword"); 
} 

をとはい、私はほとんど自分のフォームクラスなどとC#でのスコット・リリーのチュートリアルに基づいて愚かなRPGを作っています...誰かが手伝ってくれることを願っています!前もって感謝します!

vb.netで
+0

'SuperAdventureの武器は=新しいSuperAdventure():最後に、InventoryScreen内のボタンをに変更します

InventoryScreen iv = new InventoryScreen(player, this); 

; '新しいフォームを作成し、既存のフォームと対話しません。つまり、 'weapon.Show()'を使うと新しいフォームが表示され、他の既存のフォームは影響を受けません。さらに、フォームの初期化時にコンボボックスから何も選択されないので、コンストラクタで選択されたインデックスを指定しないかぎり、新しいフォームでも変更はありません – Everyone

+0

'weapon.Show();'行@AmmarSalmanを参照すると、 'SuperAdventure weapon = new SuperAdventure();'行に続いて、私はあなたが暴露を経験すると信じています。それはより多くの疑問につながる可能性が高い。私はあなたがそれを保つことをお勧めします。 – hawkeyegold

+0

客観的なプログラミングの聖母..あなたの紳士は、私がどれほど愚かなのか気づかされました。それで、コンボボックスをコンボボックスの中の別のクラス/フォームからコンボボックスに変える方法はどうすれば作れますか?このbtnEquipWeapon_Clickでクラスをインスタンス化する必要はありませんか? –

答えて

0

簡単な解決策は、(私は本当に大きなプロジェクトのためお勧めしません)このようなものだと思う翻訳して試すことができます:まず、InventoryScreenにプライベートフィールドを追加SuperAdventureフォームタイプの次にタイプをコンストラクタInventoryScreenに追加します。このようにしてInventoryScreenに電話すると、SuperAdventureハンドラが新しいInventoryScreenに渡され、そのハンドルから元の既存のSuperAdventureフォームに変更を加えることができます。

SuperAdventure callingForm; 

InventoryScreen(Player player, SuperAdventure callingForm) {  
    InitializeComponent(); 
    _currentPlayer = player; 
    this.callingForm = callingForm; 
    cboCurrentWeapon.DataSource = _currentPlayer.Weapons; 
    cboCurrentWeapon.DisplayMember = "Name"; 
} 

あなたのようなだけで、別のパラメータとしてthisを渡すInventoryScreenを呼び出す:

private void btnEquipWeapon_Click(object sender, EventArgs e) 
    { 
     String CurrentWeapon = this.cboCurrentWeapon.GetItemText(this.cboCurrentWeapon.SelectedItem); 
     callingForm.cboWeapons_SelectedItemChange(CurrentWeapon); 
    } 
+0

あなたはGENIUSです!私の一日を過ごした友人、ありがとうございました。 –

+0

それはあなたのためにうまくいったのですか? – Everyone

+0

それは私がAmmarを動かすのと同じくらいうまくいった。どうもありがとう! –

0
Form1.ComboBox1.SelectedIndex = me.ComboBox2.SelectedIndex 

ザッツしかし、あなたは私が

+0

これはどう関連していますか? – Everyone

関連する問題