2013-05-09 60 views
2

我有一個組合框和項目列表。當用戶開始輸入時,應該打開下拉菜單。點擊鍵應該檢查組合框的文字。打在組合框中輸入清除文本

爲了達到這個目的,我在我的keydown事件中設置了DroppedDown = true。然而,在我擊中關鍵因素之後,組合框的文本變爲空白。

​​

爲什麼組合框文本被清除並且存在解決方法?

我的用戶寧願我不使用AutoCompleteMode.SuggestAppend,但我會如果我必須。

全樣本代碼:

public class Demo : Form { 
    private System.ComponentModel.IContainer components = null; 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    private void InitializeComponent() 
    { 
     this.lblText = new System.Windows.Forms.Label(); 
     this.cmbItems = new System.Windows.Forms.ComboBox(); 
     this.SuspendLayout(); 
     // 
     // lblText 
     // 
     this.lblText.AutoSize = true; 
     this.lblText.Location = new System.Drawing.Point(152, 47); 
     this.lblText.Name = "lblText"; 
     this.lblText.Size = new System.Drawing.Size(155, 13); 
     this.lblText.TabIndex = 17; 
     this.lblText.Text = "Text"; 
     // 
     // cmbItems 
     // 
     this.cmbItems.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append; 
     this.cmbItems.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; 
     this.cmbItems.Location = new System.Drawing.Point(12, 44); 
     this.cmbItems.Name = "cmbItems"; 
     this.cmbItems.Size = new System.Drawing.Size(121, 21); 
     this.cmbItems.TabIndex = 0; 
     this.cmbItems.KeyDown += new System.Windows.Forms.KeyEventHandler(this.cmbItems_KeyDown); 
     // 
     // Demo 
     // 
     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
     this.ClientSize = new System.Drawing.Size(338, 78); 
     this.Controls.Add(this.lblText); 
     this.Controls.Add(this.cmbItems); 
     this.Name = "Demo"; 
     this.Text = "Demo"; 
     this.ResumeLayout(false); 
     this.PerformLayout(); 

    } 

    #endregion 

    private System.Windows.Forms.Label lblText; 
    private ComboBox cmbItems; 

    DataTable _Items = new DataTable(); 

    public Demo() 
    { 
     InitializeComponent(); 

     BuildListOfItems(); 
    } 

    private void cmbItems_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (!e.KeyCode.Equals(Keys.Enter)) { 
      if (!cmbItems.DroppedDown) { 
       cmbItems.DroppedDown = true; 
      } 
     } 
     else { 
      //Check the text 

     } 

     lblText.Text = cmbItems.Text; 
    } 

    //Create a demo list of items. 
    private void BuildListOfItems() 
    { 
     _Items.Columns.Add("Name").DataType = typeof(string); 
     _Items.Columns.Add("ID").DataType = typeof(int); 

     for (int i = (int)'a'; i < (int)'a' + 26; i++) { 
      CreateItem(i, "", 0); 
     } 
     cmbItems.DataSource = _Items; 
     cmbItems.ValueMember = "ID"; 
     cmbItems.DisplayMember = "Name"; 
    } 

    private void CreateItem(int symbol, string prev, int count) 
    { 
     string newPrev = string.Format("{0}{1}", prev, (char)symbol); 
     _Items.Rows.Add(newPrev, _Items.Rows.Count); 
     if (count < 4) 
      CreateItem(symbol + 1, newPrev, ++count); 

    } 
} 

回答

0

我在大學做了一些這方面早早就和我回去,並檢查了我的代碼。我不是100%肯定的,但這是你在找什麼?

private void comboCode_TextType(object sender, EventArgs e) 
    { 
     int itemsIndex = 0; 
     foreach (string item in cmbGageCode.Items) 
     { 
      if (item.IndexOf(cmbGageCode.Text) == 0) 
      { 
       cmbGageCode.SelectedIndex = itemsIndex; 
       cmbGageCode.Select(cmbGageCode.Text.Length - 1, 0); 
       break; 
      } 
      itemsIndex++; 
     } 
    } 
0

這對我有效。

string perfilText = ""; 
... 
private void cbPerfis_KeyUp(object sender, KeyEventArgs e) 
{ 
      if (e.KeyData != Keys.Enter) 
      {     
       perfilText = cbPerfis.Text; 
      } 
      else 
      { 
       cbPerfis.Text = perfilText; 
       cbOrdens.Focus(); 
      } 
}