Я пишу несколько пользовательских элементов управления для других программистов здесь.
Некоторые открытые EventHandlers с тем же именем, что и база, принимаются
(UserControl CodesCombo -> SelectedValueChanged)
некоторые не
(UserControl TextBox -> TextChanged)
Я пишу UserControl, который содержит TextBox. Мне нужно представить событие TextChanged потенциальным потребителям этого элемента управления.
У меня есть аналогичный элемент управления, основанный на ComboBox, и в этом я использовал
public event EventHandler SelectedValueChanged
{
add { cbMain.SelectedValueChanged += value; }
remove { cbMain.SelectedValueChanged -= value; }
}
чтобы выставить событие «Изменить» «SelectedValueChanged», и оно работает без проблем.
Однако, когда я пытаюсь использовать эту технику в моем элементе управления на основе TextBox аналогичным образом
public event EventHandler TextChanged
{
add { tbMain.TextChanged += value; }
remove { tbMain.TextChanged -= value; }
}
Я получаю предупреждение:
'MyTextBox.TextChanged' hides inherited member 'UserControl.TextChanged'. Use new keyword if hiding was intentional.
Я не совсем уверен, что означает сообщение, кроме очевидного, но я знаю, что не думаю, что хочу что-то скрыть. У меня есть внутренние функции SelectedValueChanged и TextChanged (cbMain_SelectedValueChanged, tbMain_TextChanged), которые выполняют несколько необходимых мне задач, но я также хочу позволить потребителю получать вызов Event для изменения текста, как и в ComboBox.
Кроме того, я не получаю никакого события «изменения» в доступном списке событий в тестовой программе.
Я обошел это сейчас, выставив событие как "TextChange"
new public event EventHandler TextChange
{
add { tbMain.TextChanged += value; }
remove { tbMain.TextChanged -= value; }
}
, который дает мне событие в списке и, кажется, работает достаточно хорошо, но я бы предпочел иметь общее решение для этого, поскольку мы делаем еще несколько элементов управления для нашего пакета, и я не думаю, что Я могу избежать неприятностей с именами, которые просто «выключены».
Есть идеи, что на самом деле говорит мне это сообщение, и как я могу получить свое событие внутренне, а также получить его пользователь?
Спасибо!
Обновление: запрашивается более конкретный код:
namespace NCFLSToolbox
{
public partial class NCFLSCodesCombo : UserControl
{
//Listed in the Events for System.Windows.Forms.ComboBox
private void cbMain_SelectedValueChanged(object sender, EventArgs e)
{
ControlRequiredColoring();
}
//Exposed Event for user
public event EventHandler SelectedValueChanged
{
add { cbMain.SelectedValueChanged += value; }
remove { cbMain.SelectedValueChanged -= value; }
}
}
public partial class NCFLSTextbox : UserControl
{
//Listed in the Events for System.Windows.Forms.TextBox
private void tbMain_TextChanged(object sender, EventArgs e)
{
ControlRequiredColoring();
}
//Couldn't expose "TextChanged" by name...
////public event EventHandler TextChanged
//// {
//// add { tbMain.TextChanged += value; }
//// remove { tbMain.TextChanged -= value; }
//// }
//...so I exposed "TextChange" instead.
public event EventHandler TextChange
{
add { tbMain.TextChanged += value; }
remove { tbMain.TextChanged -= value; }
}
}
}