gpt4 book ai didi

c# - 如何使用 C#/WinForms 在运行时从 ComboBox 中删除项目

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:19 30 4
gpt4 key购买 nike

我有一个组合框,我已经可以向其添加项目,并且我希望能够在我按下删除键时删除我选择的项目。

这是我现在使用的代码。

    private void commandComboBox_KeyDown(object sender, KeyEventArgs e)
{
var myComboBox = (ComboBox)sender;
string text = myComboBox.Text;
if (e.KeyCode == Keys.Enter)
{
myComboBox.Items.Add(myComboBox.Text); // Add
}

if (e.KeyCode == Keys.Delete)
{
myComboBox.Items.Remove(myComboBox.SelectedItem);
}
}

当我在组合框中单击并开始键入然后按回车键时,我听到窗口声音(不确定是哪一个),然后该项目被添加到列表中。当我点击下拉按钮时,我会看到上面输入的文本项。当我点击删除时,该项目消失了(至少我认为它消失了)然后当我点击其他地方时我得到这个异常

System.ArgumentOutOfRangeException: InvalidArgument=Value of '0' is not valid for 'index'.
Parameter name: index

此外,当我点击下拉按钮时,我仍然看到空白

所以我的问题是如何正确地从 ComboBox 中删除项目:)

此外,如果有比 ComboBox 更好的东西,请提一下,TY

最佳答案

您听到的 Windows 声音实际上是错误提示音。组合框不接受回车键,因此它会向您发出“不!”的哔哔声。当然,您的代码也会运行,添加项目,但这不会改变组合框认为您在焦点为错误时按 Enter 键的事实。如果您打算使用当前设计,则需要在接收到 Enter 键后吃掉它,这样组合框就不会继续尝试处理它。为此,请将 e.SuppressKeyPress 设置为 true。

出现异常是因为您删除了组合框中的所有项目,但代码的其他部分试图获取项目 #0(第一项)的文本。没有第一项,因为您删除了它,因此抛出异常。我不确定是什么代码对此负责,因为我看不到它,但我猜您已经为诸如 SelectedIndexChanged 事件之类的事件编写了处理程序。

确实,这是一个非常不寻常的界面。组合框的目的是为用户提供一个选项列表,而不是让他们输入多个选项。如果需要,请使用多行文本框。至少这样,他们将能够看到他们输入的所有内容。

或者,您可以为此使用经典的界面惯用语,其中有一个文本框可以输入,它与添加按钮一起使用,可以将输入的文本添加到 ListBox 控件中。删除按钮删除列表框中当前选定的项目。清除按钮清除列表框中的所有项目。是的,使用起来和解释起来一样令人困惑。尽可能避免这些。它们在过去糟糕的 UI 设计时代更受欢迎。

Also when I hit the dropdown button I still see the empty spaces

这些实际上并不是空白。嗯,他们是,但不是真的。 :-) 我的意思是它们不是代表单个“空”项目的占位符。这正是您在整个组合框为空(不包含任何项目)时所看到的。因为它不包含项目,所以它不能自动调整其下拉窗口的高度,所以它使用固定大小。

关于c# - 如何使用 C#/WinForms 在运行时从 ComboBox 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37886513/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com