Как выставить события в пользовательском элементе управления WinForms - PullRequest
0 голосов
/ 17 августа 2011

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

Мне нужно выставить событие Проверить измененное, чтобы при необходимости могли выполняться внешние действия. Я также показал, что состояние проверки изменилось.

В настоящее время, когда используется элемент управления, он изменяет состояние проверки, когда какой-либо из элементов управления в группе теряет фокус.

Когда я обрабатываю событие проверки изменения, должен ли я повторно запустить событие для каких-либо внешних обработчиков?

enter image description hereenter image description here

Определенные события:

/// <summary>
/// Event to forward the change in checked flag
/// </summary>
public event EventHandler CheckedChanged;

/// <summary>
/// Event to forward the change in checked state of the checkbox
/// </summary>
public event EventHandler CheckStateChanged;

Код обработчика события:

private void chkBox_CheckedChanged(object sender, EventArgs e)
{
    // Disable the controls within the group
    foreach( Control ctrl in this.Controls )
    {
        if( ctrl.Name != "chkBox" && ctrl.Name != "lblDisplay" )
        {
            ctrl.Enabled = this.chkBox.Checked;
        }
    }

    // Now forward the Event from the checkbox
    if (this.CheckedChanged != null)
    {
        this.CheckedChanged(sender, e);
    }
}

private void chkBox_CheckStateChanged(object sender, EventArgs e)
{
    // Forward the Event from the checkbox
    if( this.CheckStateChanged != null )
    {
        this.CheckStateChanged( sender, e );
    }
}

1 Ответ

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

Вы почти у цели.Вам просто нужно зарегистрировать ваше событие с помощью обработчика событий во внешнем классе.

CheckedChanged += ExternalChkBox_CheckChanged;

private void ExternalChkBox_CheckChanged(object sender, EventArgs e)
{
    // External trigger
}
...