如何防止在C#中手动输入组合框

本文关键字:手动输入 组合 何防止 | 更新日期: 2023-09-27 18:27:17

我在C#中有一个使用ComboBox的表单。如何防止用户在C#中的ComboBox中手动输入文本?

this.comboBoxType.Font = new System.Drawing.Font("Arial", 15.75F);
this.comboBoxType.FormattingEnabled = true;
this.comboBoxType.Items.AddRange(new object[] {
            "a",
            "b",
            "c"});
this.comboBoxType.Location = new System.Drawing.Point(742, 364);
this.comboBoxType.Name = "comboBoxType";
this.comboBoxType.Size = new System.Drawing.Size(89, 32);
this.comboBoxType.TabIndex = 57;   

我希望A B C是唯一的选择。

如何防止在C#中手动输入组合框

只需将您的组合设置为DropDownList:

this.comboBoxType.DropDownStyle = ComboBoxStyle.DropDownList;

我相信您想将DropDownStyle设置为DropDownList。

this.comboBoxType.DropDownStyle = 
    System.Windows.Forms.ComboBoxStyle.DropDownList;

或者,您也可以从WinForms设计器中选择控件,转到"属性"窗口,然后将"DropDownStyle"属性更改为"DropDownList"。

您可以通过将e.Handled = true添加到控件的KeyPress事件中来抑制对按键的处理:

private void Combo1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = true;
}

我喜欢保留手动插入内容的功能,但将所选项目限制在列表中。我会将此事件添加到组合框中。只要你得到的是SelectedItem而不是Text,你就会得到正确的预定义项目;a、 b和c.

private void cbx_LostFocus(object sender, EventArgs e)
{
  if (!(sender is ComboBox cbx)) return;
  int i;
  cbx.SelectedIndex = (i = cbx.FindString(cbx.Text)) >= 0 ? i : 0;
}

为什么要使用组合框?

C#有一个名为Listbox的控件。从技术上讲,组合框与列表框的区别在于,组合框可以接收输入,所以如果它不是您需要的控件,那么我建议您使用ListBox

Listbox消费指南:C#Listbox