Прежде всего им жаль мой английский. Я начинающий программист в C#, используя VS Express 2013.ComboBox item return index
Это моя простая проблема, я думаю: У меня есть combobox (cboMantello) с двумя элементами внутри. Затем у меня есть кнопка, которая использует атрибуты выбранного элемента и добавляет их в мои персонажи. Другая кнопка удаляет эти атрибуты.
Чтобы избежать спама первой кнопки, я отключил ее, а также установите для параметра combobox.enabled значение false. В этот момент возникает проблема. При отключении combobox он возвращается к первому элементу в списке, поэтому, если я выбираю второй элемент и нажимаю кнопку «equipe», он добавляет атрибуты, но затем переключается на первый элемент. Так что, если я нажму «remove» ", код удаляет атрибуты первого элемента.
Я не знаю, как сообщать combobox, чтобы вырезать второй элемент во время включенной = ложной фазы.
Благодарим за помощь и снова просим за мои грамматические «ужасы»!
Heres мой код:
private void UpdateListaMantelliInventarioUI()
{
List<Mantello> mantelli = new List<Mantello>();
foreach (OggettoInventario oggettoInventario in _player.Inventario)
{
if (oggettoInventario.Dettagli is Mantello)
{
if (oggettoInventario.Quantità > 0)
{
mantelli.Add((Mantello)oggettoInventario.Dettagli);
}
}
}
if (mantelli.Count == 0)
{
cboMantello.Enabled = false;
}
else
{
cboMantello.DataSource = mantelli;
cboMantello.DisplayMember = "Nome";
cboMantello.ValueMember = "ID";
cboMantello.SelectedIndex = 0;
}
}
private void btMantello_Click(object sender, EventArgs e)
{
Mantello mantellocorrente = (Mantello)cboMantello.SelectedItem;
_player.DifesaMagica = (_player.DifesaMagica + mantellocorrente.AggiungeDifesaMagica);
lblVesteDifesa.Text = "(+" + mantellocorrente.AggiungeDifesaMagica.ToString() + ")";
toolTip1.SetToolTip(lblVesteDifesa, mantellocorrente.Nome.ToString());
_player.Mana = (_player.Mana + mantellocorrente.AggiungeMana);
lblVesteMana.Text = "(+" + mantellocorrente.AggiungeMana.ToString() + ")";
toolTip1.SetToolTip(lblVesteMana, mantellocorrente.Nome.ToString());
_player.Evasione = (_player.Evasione + mantellocorrente.AggiungeEvasione);
lblVesteEvasione.Text = "(+" + mantellocorrente.AggiungeEvasione.ToString() + ")";
toolTip1.SetToolTip(lblVesteEvasione, mantellocorrente.Nome.ToString());
btMantello.Enabled = false;
btTogliMantello.Enabled = true;
cboMantello.Enabled = false;
UpdatePlayerStats();
UpdateListaMantelliInventarioUI();
}
private void btTogliMantello_Click(object sender, EventArgs e)
{
Mantello mantellocorrente = (Mantello)cboMantello.SelectedItem;
if (btMantello.Enabled == false)
{
btTogliMantello.Enabled = true;
_player.DifesaMagica = (_player.DifesaMagica - mantellocorrente.AggiungeDifesaMagica);
lblVesteDifesa.Text = "";
_player.Mana = (_player.Mana - mantellocorrente.AggiungeMana);
lblVesteMana.Text = "";
_player.Evasione = (_player.Evasione - mantellocorrente.AggiungeEvasione);
lblVesteEvasione.Text = "";
UpdatePlayerStats();
btMantello.Enabled = true;
cboMantello.Enabled = true;
}
btTogliMantello.Enabled = false;
}
Это не нормальное поведение. Отключение ComboBox не должно изменять выбранный элемент. –
Я знаю ... не знаю почему это происходит. –
Возможно, потому что после его отключения вы вызываете 'UpdateListaMantelliInventarioUI()' и обновляете 'DataSource'? –