首先,对不起我的英语。我是使用VS Express 2013的C#初学者程序员。
这是我认为的简单问题: 我有一个组合框(cboMantello)里面有两个项目。 然后我有一个使用所选项目属性的按钮,并将它们添加到我的角色统计中。 另一个按钮删除了这些属性。
为了避免用户垃圾邮件,我禁用了第一个按钮,并将我的combobox.enabled设置为false。 此时出现了问题。在禁用组合框时,它会返回列表中的第一个项目,因此,如果我选择第二个项目并按下" equipe"但它添加了属性,但随后组合框切换到第一个项目。所以,如果我按下"删除"按钮代码删除第一个项目属性。
我不知道如何在enabled = false阶段告诉combobox对第二项进行frezze。
感谢您的帮助,并再次为我的语法错误而烦恼" !
继承我的代码:
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;
}
答案 0 :(得分:1)
组合框重置的原因是,当您在UpdateListaMantelliInventarioUI()
的点击事件中调用bntMantello
时,您正在更改其内容,特别是行cboMantello.DataSource = mantelli;
和cboMantello.SelectedIndex = 0;
要考虑的一些选项:
cboMantello.Items
添加/删除。 SelectedIndex
获取Item
/ cboMantello
。更新cboMantello
后,您可以遍历这些项目并更新SelectedIndex
/ Item
。一些代码:
private void UpdateListaMantelliInventarioUI()
{
var previousSelection = cboMantello.SelectedItem;
...
else
{
...
if (cboMantello.Items.Contains(previousSelection))
cboMantello.SelectedItem = previousSelection;
else
cboMantello.SelectedIndex = 0;
}
}