2015-10-27 51 views
0

我正在修復使用名爲CompleteComboBox的用戶控件的c#項目。C#Combobox用戶控件不起作用,因爲它應該

它功能部分。

  1. 退格不起作用。

  2. 第一次用戶在textbox部件中輸入字符串時,該列表將按照其應有的方式打開,並且位於右側。第二次 - 列表未打開,但顯示textbox部分中的匹配行。然後,如果我打開列表並開始編寫其中一個項目的開頭,但是然後單擊其中一個項目,然後按回車 - 此項目未被選中,而是在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); 
    } 
} 

}

+0

對不起,我不是很明白,你的意思是「不能正常工作」......什麼是預期的行爲和什麼是故障?請澄清! – Shnugo

回答

1

你的代碼是凌亂。看看start標誌。在所有你期望的情況下,它都不是真的。這就是爲什麼第一次行爲與第二次行爲不同。

您的OnKeyDown事件不會觸發您期望的所有鍵。這就是退格不起作用的原因。有幾篇關於檢測退格的帖子:See for example this one

+0

謝謝Vilhelm。 –

+0

但是,我需要一些更多的幫助。這不是我的代碼,所以這就是爲什麼修復它有點困難。退格行爲並不真的讓我擔心。我應該在哪裏設置開始標誌爲真,這樣第二次組合框的確能按預期工作? –

+0

請....一個線索....我應該在哪裏添加一個開始標誌設置爲真? –

相關問題