События и переопределения пользовательского контроля - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть Пользовательский элемент управления для типичных CRUD-подобных действий в моем WinForm приложении.
Подтвердить , Вставить , Обновить , Очистить , Отменить и Удалить .

В каждой форме, которую я надеваю, я добавляю событие нажатия ucPersonNav.btnValidate.Click += new EventHandler(btnValidate_Click); для каждой кнопки.

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

Примерно так ->

namespace psUserControls
{

 using System;

using DevExpress.XtraEditors;

public partial class ucVIUCCDwithWhoDoneIt : XtraUserControl
{
    public ucVIUCCDwithWhoDoneIt()
    {
        InitializeComponent();
    }

    private void btnValidate_Click(object sender, EventArgs e)
    {
        ValidateEvent();
    }
}

}

И затем в форме есть это ->

void ValidateEvent()
{
    if (dxValidDiagnosis.Validate())
    {
        if (planDiagnosisID != 0)
        {
            ucNavDiagnosis.btnUpdate.Enabled = true;
            ucNavDiagnosis.btnDelete.Enabled = true;
        }
        ucNavDiagnosis.btnInsert.Enabled = true;
    }
}

Это возможно? Это идиотизм? Если да, то нет, тогда какие шаги мне нужно предпринять, чтобы сделать эту работу?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

я думаю .. неплохая идея .. но подход будет очень специфичным для вашего приложения.

у нас может быть перечисление для кнопок CRUD - 6 перечисляемых элементов, как вы указали.

У нас может быть один обработчик события - делегат, который принимает в качестве параметра перечисление выше. Напишите событие (MyButtonClickedEvent) для этого делегата, которое будет запускаться при каждом событии, нажатом при нажатии кнопки.

на вашем контроле, при каждом событии, нажатом на кнопку, вы можете запустить это событие с соответствующим элементом перечисления в качестве параметра. например при нажатии кнопки «Подтвердить» запускается MyButtonClickedEvent с параметром в качестве проверяемого элемента перечисления. При нажатии кнопки «Вставить» запускается тот же MyButtonClickedEvent с параметром, что и в элементе «Вставить перечисление».

Таким образом, вам придется обрабатывать одно событие в вашей форме. Вы будете запускать различные события из-под вашего контроля. Но это должно быть сделано только один раз. В вашей форме вы напишите всего один обработчик - метод. В этом методе вы можете различать в зависимости от типа перечисления. .Net поддерживает enum в конструкции switch-case. Таким образом, вы можете легко определить вариант, который вы должны выполнить.

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

Надеюсь, это поможет.

0 голосов
/ 16 сентября 2009

Вам просто нужно определить ValidateEvent как событие. В вашем UserControl:

public event EventHandler ValidateEvent;

В форме:

ucNavDiagnosis.ValidateEvent += new EventHandler(<name of event handler function>);

Однако, вероятно, не очень хорошая идея получить прямой доступ к кнопкам UserControl.

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