C# 如果当前列表框项具有无效属性,则阻止选择新列表框项

C# 如果当前列表框项具有无效属性,则阻止选择新列表框项,c#,.net,winforms,listbox,C#,.net,Winforms,Listbox,我的设置表单有一个列表框,其中包含自定义类的对象。自定义类几乎没有包含IP地址的属性 所有属性在表单中都有自己的文本框,它们的值保存在textbox的textchanged事件列表中。例如: private void textBoxIP_TextChanged(object sender, EventArgs e) { item item = (item)listBox1.SelectedItem; if (item != null)

我的设置表单有一个列表框,其中包含自定义类的对象。自定义类几乎没有包含IP地址的属性

所有属性在表单中都有自己的文本框,它们的值保存在textbox的textchanged事件列表中。例如:

    private void textBoxIP_TextChanged(object sender, EventArgs e)
    {
        item item = (item)listBox1.SelectedItem;
        if (item != null)
        {
          item.IP = textBoxIP.Text;
        }            
        listBox1.DataSource = null;
        listBox1.DataSource = lista;
        listBox1.DisplayMember = "name";
    }
以下是SelectedIndexChanged事件的代码:

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        item item = (item) listBox1.SelectedItem;
        if (item != null)
        {
            textBoxName.Text = item.name;
            textBoxDesc.Text = item.desc;
            textBoxIP.Text = item.IP.ToString();
            textBoxPort.Text = item.port.ToString();
        }
    }

现在,如果IP地址无效,我需要一种方法来防止用户在列表框中选择一个新索引,并提供一些反馈。我不知道该怎么做。我确实有一种方法来检查返回true或false的IP字符串的有效性。

如果IP无效,为什么还要将其放在列表框中


当textBoxIP.Text无效时禁用列表框。

IIRC(免责声明:我已经有一段时间没有使用WinForms了),您只需将
e.Cancel=True,这将导致所选索引不更改。你只需要把它包装在一个if语句中,检查表单是否不完整。不过,我似乎记不清:如果IP无效,为什么还要把它放在列表中?如果文本框IP无效,只需禁用列表框即可。@这是一个很好的观点。谢谢