Сгенерируйте пользовательские события в C# WinForms

У меня есть некоторые События, которые я создал самостоятельно и задавался вопросом о том, как повысить их, когда я хочу.

Вероятно, мое проектирование приложений также испорчено, мог бы смотреть на это, если Вам нравится.

Это - Структура

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) выполняется.

Какие-либо идеи?

11
задан F.P 29 July 2010 в 06:53
поделиться

1 ответ

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 теперь очень устарел).

16
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: