Я создаю приложение на C# с помощью WinForms.C# Как использовать EventArgs в базовом классе
Что я хочу:
Я хочу кнопку со стрелкой на стороне. Когда часть кнопки со стрелкой будет нажата, она отобразит выпадающее меню, но если какая-либо другая часть кнопки нажата, она должна вызвать событие щелчка мыши.
Что мне нужна помощь с:
Я уверен, что я могу сделать мышь позиционной проверку с помощью мыши позицию, но как я могу убедиться, что обработчик событий для экземпляров кнопки есть только «мышь button down ", когда была нажата основная часть кнопки? То есть как я могу съесть событие в базовом обработчике, чтобы он никогда не доходил до производного?
Что у меня есть:
Моя структура кода (упрощенно) следующим образом (взяты из Windows.Forms button with drop-down menu):
// Button class:
public class ButtonWithDropDown : Button
{
protected override void OnClick(EventArgs e)
{
// Check for when the mouse is on the button and dispose of the
// event if it's over the 'arrow' part of the button.
}
}
// Event handler:
private void btnClickMe_Click(object sender, EventArgs e)
{
MouseEventArgs mevent = (MouseEventArgs)e;
if (mevent.Button == System.Windows.Forms.MouseButtons.Left)
MessageBox.Show("Only shown when clicking the main part of the button");
}
Спасибо.
Имейте пустое 'override', в котором вы не называете' base'. –
@ David Pine Как в примере кода? (Мой фактический код вызывает 'base.OnClick (e)') К сожалению, я попытался удалить его, и он все еще проходит через событие. – Edward
Вы пытаетесь избежать события «.Click» от каких-либо слушателей или пытаетесь ли вы вообще запретить «переопределить void OnClick»? –