0
我已經在這個主題上找到了相當多的信息,並且從本論壇上的其他主題中竊取了大部分當前代碼,但是沒有似乎能夠正確地把它們放在一起。我創建了一個主窗體「Form1」,它是一個mdi容器。我可以從Form1上的菜單項創建一個子窗體「formStripChart」。我想開發自己的事件,每次在Form1中觸發timer_tick處理程序時觸發我自己的事件,並在formStripChart的事件處理程序中捕獲我的事件以更新圖表控件。我可以看到Form1正在調用「UpdateStatus」方法,但OnUpdateStatus始終爲空,因此formStripChart中的「UpdateStatus」事件處理程序永遠不會被調用。好像我沒有在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");
}
}
感謝您的幫助相關的代碼。
那麼,這不僅是更容易,但它解決了我的問題。非常感謝。 –
不客氣! –