ComboBox项目返回索引

时间:2014-12-17 23:41:59

标签: c# visual-studio-2013 combobox

首先,对不起我的英语。我是使用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;
}

1 个答案:

答案 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;
    }
}