.NET 2.0 comboBox 的问题
在任意窗口添加一个 comboBox ,属性如下            this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append;
            this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
            this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple;
            this.comboBox1.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.comboBox1_PreviewKeyDown);
            this.comboBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.comboBox1_KeyDown);
响应事件PreviewKeyDown 和KeyDown 发现,输入任意text,然后按回车,输入的东西不见了。为什么?重写哪个方法可以保证输入回车后,刚刚输入的东西还在?      private void comboBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        { 
            //这里还在
            Debug.WriteLine(comboBox1.Text);
        }        private void comboBox1_KeyDown(object sender, KeyEventArgs e)
        {
          //到这里就没了?
          Debug.WriteLine(comboBox1.Text);
       }

解决方案 »

  1.   

    如果置成为这个属性:this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
    就不会有问题
      

  2.   

    搂主设置this.comboBox1.AutoCompleteMode 属性为None就行了
      

  3.   

     成员名称 说明 
     Simple 文本部分可编辑。列表部分总可见。 
     DropDown 文本部分可编辑。用户必须单击箭头按钮来显示列表部分。这是默认样式。 
     DropDownList 用户不能直接编辑文本部分。用户必须单击箭头按钮来显示列表部分。只有在 AutoCompleteMode 为 Suggest 或 SuggestAppend 时才会显示列表。 
      

  4.   


    跟这个没什么关系的吧。主要是 this.comboBox1.DropDownStyle 这个。在为Simple的时候是不能保存的。只有为DropDown的时候可以保存
      

  5.   

    要是可以改变样式,我就不提问了,关键是不改变样式的前提下,有没有办法拦截让文本消失的方法?
    在PreviewKeyDown和KeyDown之间,.net框架做了什么?默认处理了那些消息?
      

  6.   

     我试了下.AutoCompleteMode 属性为None和这个没关系的.
    只有 this.comboBox1.DropDownStyle.DropDown;
    这样才行.
      

  7.   

    :this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown; 
      

  8.   

    首先 ComboBoxStyle.Simple的解释是
    Simple Specifies that the list is always visible and that the text portion is editable. This means that the user can enter a new value and is not limited to selecting an existing value in the list.  然后,在ComboBox的实现里,有这么一段
    case NativeMethods.WM_KEYDOWN:
    case NativeMethods.WM_SYSKEYDOWN: 
        if (SystemAutoCompleteEnabled && !ACNativeWindow.AutoCompleteActive) {
            finder.FindDropDowns(false);
        }
     
        if (AutoCompleteMode != AutoCompleteMode.None) {
            char keyChar = unchecked((char)(long)m.WParam); 
            if (keyChar == (char)(int)Keys.Escape) { 
                this.DroppedDown = false;
            } 
            else if (keyChar == (char)(int)Keys.Return && this.DroppedDown) {
                UpdateText();
                OnSelectionChangeCommittedInternal(EventArgs.Empty);
                this.DroppedDown = false; 
            }
        } 在UpdateText里
    string s = null; 
     
    if (SelectedIndex != -1) {
        object item = Items[SelectedIndex]; 
        if (item != null) {
            s = GetItemText(item);
        }
    } Text = s; 因为SelectedIndex == -1, 所以Text就直接被赋值为null,这就是为什么Text在按下Enter键以后就没有的原因