强制建议组合框自动完成模式为无- C# WinForms

zqry0prt  于 2023-03-31  发布在  C#
关注(0)|答案(1)|浏览(117)

我在WinForm中使用Metro Frame Work Combo Box,
当我尝试设置cmbCACName.AutoCompleteMode = AutoCompleteMode.Append;时,它会抛出类似“AutoCompleteMode.None can be used when DropDownStyle is ComboBoxStyle. DropDownList”的异常。
下面是我的代码

cmbCACName.DropDownStyle = ComboBoxStyle.Simple;
cmbCACName.AutoCompleteMode = AutoCompleteMode.Append;
cmbCACName.AutoCompleteSource = AutoCompleteSource.ListItems;

以下是一个例外:

我不明白发生了什么。
先谢了

8iwquhpp

8iwquhpp1#

以下是例外的原因:

  • 在metro框架中,MetroComboBoxDropDownStyle属性已被覆盖,始终将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);
    }
}

相关问题