Как продлить события управления IExtenderProvider? - PullRequest
0 голосов
/ 16 августа 2011

Есть ли способ добавить события в элемент управления, например, добавить свойства в элемент управления с помощью IExtenderProvider?

Я пытаюсь написать собственный валидатор с помощью errorpovider.с IExtenderProvider я добавляю errorprovider и текст ошибки к элементу управления.теперь мне нужно запустить событие из моего класса extender.

Snippet:

[ProvideProperty("ErrorText", typeof(TextBox))]
[ProvideProperty("ErrorProvider", typeof(TextBox))]
class ValidatorExtender : Component, IExtenderProvider {
    public bool CanExtend(object extendee) {
        return extendee is TextBox;
    }


    [DefaultValue(""), Category("Data")]
    public string GetErrorText(Control control) {
        //---------------------------
        //Return the ErrorText
        //---------------------------
        }
    }

    public void SetErrorText(Control control, string value) {
        //---------------------------
        //Assigning the ErrorText
        //---------------------------
    }

    [DefaultValue(null), Category("Data")]
    public ErrorProviderEX GetErrorProvider(Control control) {
        //---------------------------
        //Return the ErrorProvider
        //---------------------------
    }

    public void SetErrorProvider(Control control, ErrorProviderEX value) {
        //---------------------------
        //Assigning the ErrorProvider
        //---------------------------
    }
                                               //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    public event ValidatingHandler Validating; // -> The event I want to add to the Controls
                                               //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    void Control_Leave(object sender, EventArgs e) {
        if(Validating != null){
            Validating(this, new ValidatingEventArgs());
            //--------------------------
            // Assign Error if necessary
            //--------------------------
        }
    }
}

1 Ответ

1 голос
/ 16 августа 2011

Метод SetErrorText - это ваш ключ.Вам нужно сохранить список <> элементов управления, для которых у вас есть текст ошибки.Вы добавляете элемент управления в список в SetErrorText, когда его еще нет в списке.И подпишитесь на свое Валидирующее событие.Вы удаляете его из списка, когда аргумент value равен нулю или пуст.И отписаться на событие.Это хорошо объяснено в статье библиотеки MSDN для IExtenderProvider, проверьте код для метода SetHelpText () в приведенном там примере.

В способе, которым вы это делаете, есть проблема, элемент управления может установить текст ошибкино не провайдер ошибок.Или наоборот, ни хорошо.Лучше всего оставить свой собственный ErrorProvider в качестве частного члена вашего класса или назначить его через свойство.Одного достаточно.

...