我在WinForm中使用Metro Frame Work组合框,
当我尝试设置cmbCACName.AutoCompleteMode = AutoCompleteMode.Append;
时,它会抛出类似“AutoCompleteMode。DropDownStyle为ComboBoxStyle.DropDownList时无法使用”的异常。
这是我的代码
cmbCACName.DropDownStyle = ComboBoxStyle.Simple;
cmbCACName.AutoCompleteMode = AutoCompleteMode.Append;
cmbCACName.AutoCompleteSource = AutoCompleteSource.ListItems;
这是一个例外:
我不明白发生了什么。
提前致谢
最佳答案
这是例外的原因:
在Metro框架中,已将DropDownStyle
的MetroComboBox
属性重写为始终将DropDownStyle
设置为DropDownList
。
另一方面,在ComboBox
中,AutoCompleteMode
属性包含一个验证规则,以便在AutoCompleteMode
的值设置为None
以外的其他值时引发异常。
因此,代码的第一行从技术上讲将DropDownStyle
设置为DropDownList
。因此,在第二行中,将Append
分配给AutoCompleteMode
将导致异常。
MetroComboBox.DropDownList
[DefaultValue(ComboBoxStyle.DropDownList)]
[Browsable(false)]
public new ComboBoxStyle DropDownStyle
{
get { return ComboBoxStyle.DropDownList; }
set { base.DropDownStyle = ComboBoxStyle.DropDownList; }
}
ComboBox.AutoCompleteMode
DefaultValue(AutoCompleteMode.None),
SRDescription(SR.ComboBoxAutoCompleteModeDescr),
Browsable(true), EditorBrowsable(EditorBrowsableState.Always)
]
public AutoCompleteMode AutoCompleteMode {
get {
return autoCompleteMode;
}
set {
//valid values are 0x0 to 0x3
if (!ClientUtils.IsEnumValid(value, (int)value, (int)AutoCompleteMode.None, (int)AutoCompleteMode.SuggestAppend)) {
throw new InvalidEnumArgumentException("value", (int)value, typeof(AutoCompleteMode));
}
if (this.DropDownStyle == ComboBoxStyle.DropDownList &&
this.AutoCompleteSource != AutoCompleteSource.ListItems &&
value != AutoCompleteMode.None) {
throw new NotSupportedException(SR.GetString(SR.ComboBoxAutoCompleteModeOnlyNoneAllowed));
}
if (Application.OleRequired() != System.Threading.ApartmentState.STA) {
throw new ThreadStateException(SR.GetString(SR.ThreadMustBeSTA));
}
bool resetAutoComplete = false;
if (autoCompleteMode != AutoCompleteMode.None && value == AutoCompleteMode.None) {
resetAutoComplete = true;
}
autoCompleteMode = value;
SetAutoComplete(resetAutoComplete, true);
}
}