Я нашел много информации об этой теме и украл большую часть моего текущего кода из других тем на этом форуме, но не похоже, могут правильно собрать все это вместе. Я создал основную форму «Form1», которая является контейнером mdi. Я могу создать дочернюю форму «formStripChart» из пункта меню Form1. Я хотел бы запустить собственное событие, которое запускается каждый раз, когда обработчик timer_tick запускается в Form1 и захватывает мое событие в обработчике событий в formStripChart для обновления элемента управления диаграммой. Я вижу, что Form1 вызывает метод UpdateStatus, но OnUpdateStatus всегда имеет значение null, поэтому обработчик события UpdateStatus в formStripChart никогда не вызывается. Похоже, я не делаю ничего, что нужно сделать в formStripChart, чтобы заставить Form1 понять, что кто-то слушает событие, но я не смог понять, что.Как создать событие в родительской форме mdi и уловить его в дочерней форме
Вот соответствующий код в форме 1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void StatusUpdateHandler(object sender, ProgressEventArgs e);
public event StatusUpdateHandler OnUpdateStatus;
private static double depthValue = 0.0;
private static Random randomValue = new Random();
private void timerData_Tick(object sender, EventArgs e)
{
depthValue = depthValue + randomValue.NextDouble() - 0.5;
iusblEventArgs.xValue = 0.0;
iusblEventArgs.yValue = 0.0;
iusblEventArgs.zValue = depthValue;
iusblEventArgs.timeStamp = DateTime.Now;
ProgressEventArgs args = new ProgressEventArgs("test status");
UpdateStatus("sent from timerData_tick");
}
private void UpdateStatus(string status)
{
// Make sure someone is listening to event
if (OnUpdateStatus == null) return;
ProgressEventArgs args = new ProgressEventArgs(status);
OnUpdateStatus(this, args);
}
public class ProgressEventArgs : EventArgs
{
public string Status { get; private set; }
public ProgressEventArgs(string status)
{
Status = status;
}
}
private void btnGo_Click(object sender, EventArgs e)
{
timerData.Enabled = true;
}
и здесь соответствующий код в formStripChart
public partial class FormStripChart : Form
{
private Form1 form1;
public FormStripChart()
{
InitializeComponent();
form1 = new Form1();
form1.OnUpdateStatus += new Form1.StatusUpdateHandler(UpdateStatus);
}
private void UpdateStatus(object sender, Form1.ProgressEventArgs e)
{
Console.Write("Update the chart here");
}
}
Спасибо за любую помощь.
Ну, это не только легче, но и исправлено мое решение. Большое спасибо. –
Добро пожаловать! –