【问题标题】:Forcibly Suggesting Combo Box Auto Complete Mode To None - C# WinForms强制将组合框自动完成模式建议为无 - C# WinForms
【发布时间】:2018-02-18 06:44:36
【问题描述】:

我在我的 WinForm 中使用 Metro Frame Work 组合框,

当我尝试设置 cmbCACName.AutoCompleteMode = AutoCompleteMode.Append; 时,它会抛出一个异常,例如“当 DropDownStyle 为 ComboBoxStyle.DropDownList 时可以使用 AutoCompleteMode.None”。

这是我的代码

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

这里有一个例外:

我不明白发生了什么。

提前致谢

【问题讨论】:

    标签: c# winforms combobox microsoft-metro


    【解决方案1】:

    这里是异常的原因:

    • 在 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);
        }
    }
    

    【讨论】:

    • 那么我该如何处理呢?
    • 对于MetroComboBox,您可以将DropDownList 用作DropDownStyle。无论如何,我希望答案能帮助您了解正在发生的事情
    • 是的,但是我的问题没有解决,我需要自动完成模式作为追加
    • 有什么办法可以改变metro表单标题的背景颜色吗?当我再次为地铁网格标题和单元格添加边框样式时,它会强制重置为无。
    • 与上面相同,我无法将文本添加到 Metro 组合框,我正在为组合框文本属性分配字符串值,但添加后显示为空
    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2011-01-11
    • 2011-07-31
    • 2017-01-01
    • 2021-12-07
    • 2013-09-10
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多