У меня есть некоторые События, которые я создал самостоятельно и задавался вопросом о том, как повысить их, когда я хочу.
Вероятно, мое проектирование приложений также испорчено, мог бы смотреть на это, если Вам нравится.
Это - Структура
ProgramContext
- Form MainWindow
+ Control TextBox
+ Control Button
+ ...
В этом случае, MainWindow.TextBox
содержит некоторую информацию, которая обновляется довольно часто во времени выполнения. Так, мне так или иначе нужен он для обновления себя, когда я хочу к (таким образом, это может перезагрузить свои данные из базы данных, где это хранится),
Я пытался сцепиться EventHandler
к Validating
- Событие, но это, казалось, не добивалось цели.
Так, в основном у меня есть метод, который перезагружает данные в ProgramContext
DataTable table = _adapter.GetData();
foreach (DataRow row in table.Rows)
{
MainWindow.TextBox.Text += table.Text.ToString();
}
Это должно быть сделано каждый раз, когда другой метод (который вписывает в новые данные table
) выполняется.
Какие-либо идеи?
Edit : Похоже, что ваш вопрос больше о подключении к конкретному событию, но FWIW ниже описано, как вызывать пользовательские события в целом.
Обработка события TextBox Changed Event
Насколько я понимаю, вы хотите, чтобы внешняя сторона отслеживала события, вызванные текстовым полем на форме, а затем перезагружала данные на другую форму?
Быстрый и грязный способ - сделать TextBox формы публичным, и тогда другие смогут подписаться на это событие
MainForm.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
ИЛИ, в более новых версиях C#:
MainForm.textBox1.TextChanged += this.textBox1_TextChanged;
Добавление собственного пользовательского события
Другой, более чистый способ - поднять пользовательское событие, - например, MyDataChangedEvent
ниже. Это позволит вам абстрагироваться от того факта, что изменения происходят из текстового поля.
// Assuming you need a custom signature for your event. If not, use an existing standard event delegate
public delegate void myDataChangedDelegate(object sender, YourCustomArgsHere args);
// Expose the event off your component
public event myDataChangedDelegate MyDataChangedEvent;
// And to raise it
var eventSubscribers = MyDataChangedEvent;
if (eventSubscribers != null)
{
eventSubscribers(this, myCustomArgsHere);
}
Вы также можете посмотреть на Ent Lib Composite Application Block и Smart Client Software Factory - они имеют очень гибкий механизм брокера событий / pub sub для синхронизации между "SmartParts" пользовательского интерфейса (элементы управления, диалоги форм и т.д.) в свободной связке. (CAB теперь очень устарел).