2016-12-14 1 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를 만드는 중이라서 ... 누군가가 도울 수 있기를 바랍니다! 미리 감사드립니다!

+0

'SuperAdventure 무기 = 새로운 SuperAdventure : 마지막으로

InventoryScreen iv = new InventoryScreen(player, this); 

, InventoryScreen에있는 버튼으로 변경할 것 ; '새 양식을 만들고 기존 양식과 상호 작용하지 않습니다. 즉, weapon.Show()를 사용하면 새 폼이 표시되고 다른 기존 폼은 영향을받지 않습니다. 또한, 폼 초기화시 콤보 박스에서 아무 것도 선택되지 않으므로 생성자에서 선택된 인덱스를 지정하지 않으면 새 폼에서도 변경되지 않습니다. – Everyone

+0

'weapon.Show();'라인을 추가하면 @AmmarSalman이 즉시 참조됩니다. 'SuperAdventure weapon = new SuperAdventure();'라인 다음에, 나는 당신이 계시를 경험할 것이라고 믿는다. 가능성이 더 많은 질문으로 이어질 것입니다. 계속 지키길 부탁드립니다. – hawkeyegold

+0

객관적인 프로그래밍의 거룩한 어머니. 당신 신사들은 나를 어리 석다는 것을 깨닫게했습니다. 그렇다면 콤보 박스를 다른 클래스/폼의 콤보 박스에서 선택한 항목을 본질적으로 변경할 수있는 방법을 어떻게 만들 수 있습니까? 이 btnEquipWeapon_Click 클래스를 인스턴스화 할 필요가 없습니까? –

답변

0

쉬운 솔루션 (정말 큰 프로젝트를 권하고 싶지 않다) 생각 시도 할 수 있습니다 : 첫째, InventoryScreen에서 개인 필드를 추가 양식 유형은 SuperAdventure입니다. 그런 다음 InventoryScreen 생성자에 SuperAdventure 유형을 추가하십시오. 이 방법으로 InventoryScreen으로 전화하면 SuperAdventure 처리기가 새 InventoryScreen으로 전달되고 해당 핸들에서 원래의 SuperAdventure 양식을 변경할 수 있습니다. 당신이 InventoryScreen를 호출 할 때

SuperAdventure callingForm; 

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

단지와 같은 다른 매개 변수로 this을 전달합니다) (

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

당신은 제니스입니다 !! 네가 내 하루를 만들어 준 대단히 고맙다. –

+0

잘 돌아 갔습니까? – Everyone

+0

그것은 Ammar를 일하기를 원했던대로 정확하게 작동했습니다. 많은 감사합니다! –

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

vb.net에서 그게하지만 당신은 번역과 같은 것 내가

+0

이것은 어떻게 관련이 있습니까? – Everyone

관련 문제