.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);
}
在任意窗口添加一个 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);
}
解决方案 »
- 一个电影院网上售票系统的网站
- 谁能给个数据库备份还远的源代码?
- vs 2008导入项目时出现的问题
- 显示器的分辩率与解像度有什么不同吗?谢谢
- System.DirectoryServices FindOne()调用失败问题?
- 急救!!!异常详细信息: System.Data.SqlClient.SqlException: 第 1 行: 'where' 附近有语法错误。
- 请教一下,在不知道数组总共有多少个元素的情况下,怎么实现数组中偶数下标的数减奇数下标的数?
- C#在web开发中如何取到服务器时间?如何判断oleDbCommand查询的结果为空?
- 急啊:呼啦啦,呼啦啦,娃娃想回家.呼啦啦,呼啦啦,又没钱回家.只好呆着啦
- 内部查询处理器错误!怎么回事情呀!语句在SQL2000查询分析器中执行正常!
- try.....catch怎么用?
- C#如何动态创建控件?
就不会有问题
Simple 文本部分可编辑。列表部分总可见。
DropDown 文本部分可编辑。用户必须单击箭头按钮来显示列表部分。这是默认样式。
DropDownList 用户不能直接编辑文本部分。用户必须单击箭头按钮来显示列表部分。只有在 AutoCompleteMode 为 Suggest 或 SuggestAppend 时才会显示列表。
跟这个没什么关系的吧。主要是 this.comboBox1.DropDownStyle 这个。在为Simple的时候是不能保存的。只有为DropDown的时候可以保存
在PreviewKeyDown和KeyDown之间,.net框架做了什么?默认处理了那些消息?
只有 this.comboBox1.DropDownStyle.DropDown;
这样才行.
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键以后就没有的原因