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); 
} 

А вот метод cboWeapons_SelectedItemChange из SuperAdventure .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"); 
} 

И да, я делаю глупую RPG на основе учебника Скотт Лилли в C# с преимущественно собственными формами классов и т.д. ... Надеюсь, кто-то сможет помочь! Заранее спасибо!

+0

'SuperAdventure оружие = новый SuperAdventure() ; 'создает новую форму и не взаимодействует с существующей формой. Тем не менее, если вы используете 'weapon.Show()', вы увидите свою новую форму, любые другие существующие формы не будут затронуты. Более того, при инициализации формы ничего не выбрано из combobox, поэтому даже новая форма не будет иметь никаких изменений, если вы не укажете выбранный индекс в конструкторе – Everyone

+0

Если вы добавите ссылку 'weapon.Show();' line @AmmarSalman, о которой идет речь, немедленно после «SuperAdventure weapon = new SuperAdventure(); line, я считаю, что вы испытаете откровение. Это, скорее всего, приведет к большему количеству вопросов. Я призываю вас продолжать. – hawkeyegold

+0

Святая мать объективного программирования .. Вы, джентльмены, заставили меня понять, насколько я тупой. Итак, как бы я создал метод, который мог бы по сути сделать combobox изменить выбранный элемент в combobox из другого класса/формы? Мне не нужно создавать экземпляр класса в этом btnEquipWeapon_Click? –

ответ

0

Простое решение (я бы не рекомендовал для больших проектов) будет выглядеть так: Во-первых, добавить частное поле в InventoryScreen формы формы SuperAdventure. Затем добавьте 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"; 
} 

При вызове InventoryScreen просто передать this в качестве другого параметра, как:

InventoryScreen iv = new InventoryScreen(player, this); 

Наконец, кнопка в InventoryScreen изменится на:

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

ВЫ ГЕНОВ! Большое спасибо моему другу, что вы сделали мой день. –

+0

Он хорошо работает для вас? – Everyone

+0

Он работал так, как я хотел, чтобы он работал Аммаром. Большое спасибо! –

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

То в vb.net, но вы можете перевести и попробовать я думаю

+0

Как это связано? – Everyone

Смежные вопросы