Распространение событий от одной Формы до другой Формы в C#

Вы сказали «и при этом я не хочу трогать любой исходный файл» ... честную игру, если вы позволите сценарию сделать это за вас?

Запустите это на всех ваших файлах .cpp

sed 's/^{/{ENTRY/'

Чтобы преобразовать их в это:

void foo()
{ENTRY
  // code here
}

Поместите это в заголовок, который может быть # # включен каждой единицей:

#define ENTRY EntryRaiiObject obj ## __LINE__ (__FUNCTION__);

struct EntryRaiiObject {
  EntryRaiiObject(const char *f) : f_(f) { printf("Entered into %s", f_); }
  ~EntryRaiiObject() { printf("Exited from %s", f_); }
  const char *f_;
};

Возможно, вам придется стать более изощренным со скриптом sed. Вы также можете поместить макрос ENTRY в любое другое место, где хотите исследовать, например, в какую-то глубоко вложенную область видимости функции.

6
задан user366312 10 June 2009 в 18:18
поделиться

3 ответа

Если вы пытаетесь использовать WinForms, вы можете реализовать настраиваемое событие в своей «дочерней» форме. Это событие может срабатывать при нажатии кнопки в вашей «дочерней» форме.

Затем ваша «родительская» форма будет прослушивать событие и обрабатывать его собственное обновление TextBox.

public class ChildForm : Form
{
    public delegate SomeEventHandler(object sender, EventArgs e);
    public event SomeEventHandler SomeEvent;

    // Your code here
}

public class ParentForm : Form
{
    ChildForm child = new ChildForm();
    child.SomeEvent += new EventHandler(this.HandleSomeEvent);

    public void HandleSomeEvent(object sender, EventArgs e)
    {
        this.someTextBox.Text = "Whatever Text You Want...";
    }
}
15
ответ дан 8 December 2019 в 14:46
поделиться

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

1
ответ дан 8 December 2019 в 14:46
поделиться

Предполагая WinForms;

Если текстовое поле привязано к свойству объекта, вы должны реализовать интерфейс INotifyPropertyChanged для объекта и уведомить об изменении значения строки.

public class MyClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string title;
    public string Title {
      get { return title; } 
      set { 
        if(value != title)
        {
          this.title = value;
          if (this.PropertyChanged != null)
          {
             this.PropertyChanged(this, new PropertyChangedEventArgs("Title"));
          }
       }
  }

Если вы выполняете привязку к свойству Title, обновление будет проходить «автоматически» для всех форм / текстовых полей, которые привязаны к объекту. Я бы рекомендовал вышеупомянутую отправку определенных событий, так как это обычный способ уведомления привязки обновлений к свойствам объекта.

0
ответ дан 8 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

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