c# Combobox用户控件没有正常工作

本文关键字:常工作 工作 Combobox 用户 控件 | 更新日期: 2023-09-27 18:19:18

我正在修复一个使用名为CompleteComboBox的用户控件的c#项目。

它起部分作用。

  1. 用户第一次在textbox部分输入字符串时,列表按正常打开,并位于右行。第二次-列表没有打开,但它确实显示了textbox部分中匹配的行。然后,如果我打开列表并开始写入其中一个项目的开头,但随后单击其中一个项目并按enter键-该项目未被选中,而是在text box部分输入字母时被选中的项目。

希望你能理解我。

代码如下:

 namespace BestInvest.UserControls
{
public partial class CompleteComboBox : System.Windows.Forms.ComboBox
{
    public event System.ComponentModel.CancelEventHandler NotInList;
    private bool _limitToList = true;
    private bool _inEditMode = false;
    bool start;
    public CompleteComboBox()
        : base()
    {
        start = true;
        this.Text = ClsConsts.InitializeTextForCombo;
    }
    [Category("Behavior")]
    public bool LimitToList
    {
        get { return _limitToList; }
        set { _limitToList = value; }
    }
    protected virtual void OnNotInList(System.ComponentModel.CancelEventArgs e)
    {
        if (NotInList != null)
        {
            NotInList(this, e);
        }
    }
    protected override void OnTextChanged(System.EventArgs e)
    {
        if (_inEditMode)
        {
            string input = Text;
            int index = FindString(input);
            if (index >= 0)
            {
                _inEditMode = false;
                SelectedIndex = index;
                _inEditMode = true;
                Select(input.Length, Text.Length);
                //base.DroppedDown = true;
            }
        }
        base.OnTextChanged(e);
    }
    protected override void OnValidating(System.ComponentModel.CancelEventArgs e)
    {
        if (this.LimitToList)
        {
            int pos = this.FindStringExact(this.Text);
            if (pos == -1)
            {
                OnNotInList(e);
            }
            else
            {
                this.SelectedIndex = pos;
            }
        }
        base.OnValidating(e);
    }
    protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
        if (start)
        {
            base.DroppedDown = true;
            //else
            start = false;
        }
        if (e.KeyCode == Keys.Enter)
        {
            base.DroppedDown = false;
            start = true;
        }
        _inEditMode = true;
        base.OnKeyDown(e);
    }
}

}

c# Combobox用户控件没有正常工作

你的代码很乱。看start标志。它并不是在你期望的所有情况下都设为true。这就是为什么第一次和第二次的行为不同。

您的OnKeyDown事件不会在您期望的所有键上触发。这就是退格键不起作用的原因。这里有一些关于检测退格的帖子:例如这个