组合框C#中的怪异行为

本文关键字:组合 | 更新日期: 2023-09-27 18:27:54

我的组合框中有一个奇怪的行为。我有两个组合框,一个是cboSede,另一个是cboGroup。CboSede启用cboGroup。我已经在其他形式中这样做了,但在这里我得到了这样的消息:用户代码未处理ArgumentOutOfRangeException。其想法是,如果用户没有在cboSede中选择任何值,则cboGroup将不启用;另一方面,如果用户在cboSide中选择了有效选项,则cboCroup将启用。

这是我的代码:

cboSede 的SelectedIndexChanged

private void cboSede_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Util.Security.ConexionBD)
        {
            if (Convert.ToInt32(cboSede.SelectedIndex) == 0 || Convert.ToInt32(cboSede.SelectedIndex) == -1)
            {
                cboGroup.Enabled = false;
                cboGroup.SelectedIndex = 0;
            }
            else
            {
                this.FillGroupCombo();
                cboGroup.Enabled = true;
            }
        }
        else
            MessageBox.Show("Error", "Warning",
                            MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }

FillGroupCombo函数

private void FillGroupCombo()
    {
        try
        {
            Entity.Group objGroup = new Entidad.Group ();
            objGroup .IdSede = Convert.ToInt32(cboSede.SelectedValue);
            objGroup = Control.Group.ListBySede(objGroup );
            if (objGroup != null && objGroup.ListGroup.Count > 0)
            {
                Entity.Group objMsje = new Entity.Group();
                objMsje.IdGroup = -1;
                objMsje.Name= "--- Select group ---";
                objGroup.ListGroup.Insert(0, objMsje);
            }
            else
            {
                Entity.Group objMsje = new Entity.Group();
                objMsje.IdGroup = 0;
                objMsje.Name= "-- No groups found --";
                objGroup.ListGroup.Insert(0, objMsje);
            }
            Util.Utilitario.FillCombo(objGroup.ListGroup, this.cboGroup, "IdGrupo", "Name");
        }
        catch (Exception ex)
        {
            Util.Security.Insert(ex);
            Util.Security.SaveLog(ex.Message);
        }
    }

知道为什么会发生这种情况吗?

组合框C#中的怪异行为

这个

if (Convert.ToInt32(cboSede.SelectedIndex) == 0 || Convert.ToInt32(cboSede.SelectedIndex) == -1)
{
    cboGroup.Enabled = false;
    cboGroup.SelectedIndex = 0;
}

SelectedIndex == -1时将杀死代码,并且您的comboBox中实际上没有项目(当index = 0时,它是OutOfRange

如果你想要,你可以给出if条件

if (cboGroup.Items.Count > 0)
    cboGroup.SelectedIndex = 0;

这样,它首先检查comboBox是否真的有任何东西。如果没有,则不会产生OutOfRange错误