Проблема с [DefaultValue ()], наследующей ComboBox - PullRequest
2 голосов
/ 19 октября 2010

для моего проекта я унаследовал ComboBox, чтобы изменить его размер. В дополнение к этому я хотел, чтобы ускорить создание моих форм, установить значение по умолчанию DropDownStyle в ComboBoxStyle.DropDownList

Для этого я использовал команду [Default()], перезаписав свойство DropDownStyle

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

Затем я изменил значение по умолчанию в Designer, установив DropDownStyle в ComboBoxStyle.DropDownList.

И тут возникает проблема ... Есть небольшое количество InheritedComboBox, которое я хочу иметь ComboBoxStyle.DropDown, потому что они должны работать с

AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append;
AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;

Если я установил его из Designer, он работает нормально, однако иногда, после того, как я перестраиваю форму, он выдает исключение (также во время разработки) относительно ComboBoxStyle. Когда я смотрю на файл FormName.Designer.cs, я могу обнаружить, что для конкретного InheritedComboBox нет

DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown

и я должен добавить его вручную. Это немного скучно, потому что иногда я просто замечаю это во время выполнения, когда программа выдает исключение, не показывая форму, и я не могу проверять каждую форму каждый раз, когда перестраиваю ...

У вас есть идеи, почему у меня такое странное поведение?

Есть ли способ это исправить?

Большое спасибо за любой ответ!

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Когда вы устанавливаете свойство AutoCompleteMode или AutoCompleteSource, я считаю, что дизайнер ищет базовый ComboBox, а не генерирует строку для установки DropDownStyle, так как DropDown равно значение по умолчанию для ComboBox.

Я смог исправить это, добавив свойство AutoCompleteMode и AutoCompleteSource к унаследованному ComboBox, но также пришлось добавить строку для установки базы DropDownStyle из-запорядок, в котором дизайнер устанавливает свойства.

Попробуйте что-то вроде этого и посмотрите, работает ли он для вас:

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; 
        }
    }
}
0 голосов
/ 19 октября 2010

Попробуйте установить это значение для свойства в конструкторе унаследованного комбинированного списка, а также для значения, установленного с помощью DefaultValue. Это, вероятно, должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...