首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >[DefaultValue()]继承ComboBox时出现问题

[DefaultValue()]继承ComboBox时出现问题
EN

Stack Overflow用户
提问于 2010-10-19 22:32:54
回答 2查看 656关注 0票数 2

对于我的一个项目,我继承了一个ComboBox来改变它的大小行为。除此之外,我还想加快表单的创建速度,将默认的DropDownStyle设置为ComboBoxStyle.DropDownList

为此,我使用了覆盖DropDownStyle属性的[Default()]命令

代码语言:javascript
运行
复制
[DefaultValue(ComboBoxStyle.DropDownList)]
public new ComboBoxStyle DropDownStyle
{
    get
    {
        return base.DropDownStyle;
    }
    set
    {
        base.DropDownStyle = value;
    }
}

然后,我在设计器中修改了默认值,将DropDownStyle设置为ComboBoxStyle.DropDownList

问题来了..。有一小部分InheritedComboBox我想要有ComboBoxStyle.DropDown,因为它们需要使用

代码语言:javascript
运行
复制
AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append;
AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;

如果我从设计器中设置它,它工作得很好,但是,有时,在我重新构建窗体后,它会抛出一个关于ComboBoxStyle的异常(也是在设计时)。当我查看FormName.Designer.cs文件时,我可以发现对于特定的InheritedComboBox没有

DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown

我必须手动添加它。这有点无聊,因为有时我只是在运行时注意到它,当程序抛出一个异常而不显示窗体时,我不能在每次重新构建时测试每个窗体……

你知道为什么我会有这种奇怪的行为吗?

有没有办法解决这个问题?

非常感谢你的回复!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-20 00:38:02

当您设置AutoCompleteModeAutoCompleteSource属性时,我相信设计者查看的是基本ComboBox,而不是生成用于设置DropDownStyle的行,因为DropDown是ComboBox的默认值。

我可以通过将AutoCompleteModeAutoCompleteSource属性添加到继承的ComboBox来纠正此问题,但由于设计器设置属性的顺序,我还必须添加一行来设置基本DropDownStyle

试试这样的方法,看看它对你是否有效:

代码语言:javascript
运行
复制
public class MyComboBox : ComboBox
{
    public MyComboBox()
    {
        DropDownStyle = ComboBoxStyle.DropDownList;
        AutoCompleteMode = AutoCompleteMode.None;
        AutoCompleteSource = AutoCompleteSource.None;
    }

    [DefaultValue(ComboBoxStyle.DropDownList)]
    public new ComboBoxStyle DropDownStyle
    {
        get { return base.DropDownStyle; }
        set { base.DropDownStyle = value; }
    }

    [DefaultValue(AutoCompleteMode.None)]
    public new AutoCompleteMode AutoCompleteMode
    {
        get { return base.AutoCompleteMode; }
        set 
        {
            if (value != AutoCompleteMode.None)
                base.DropDownStyle = ComboBoxStyle.DropDown;

            base.AutoCompleteMode = value; 
        }
    }
    [DefaultValue(AutoCompleteSource.None)]
    public new AutoCompleteSource AutoCompleteSource
    {
        get { return base.AutoCompleteSource; }
        set 
        {
            if (value != AutoCompleteSource.None)
                base.DropDownStyle = ComboBoxStyle.DropDown;

            base.AutoCompleteSource = value; 
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-10-19 22:40:21

尝试将此值设置为继承组合框的构造函数中的属性,也设置为您使用DefaultValue设置的值。这可能会解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3969442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档