好的——这不是我的应用程序,我只是想改进它。
无论如何,问题是谁拥有谁,谁在哪里可见。
主窗体上有用于用户输入的控件。
在 MainForm 上声明了一个“类预览”类型的变量:
Preview pv
对于 Preview 类,我添加了一个名为 WorkOn 的事件声明:
public class Preview
{
#region "Variables"
#region "PublicEvent"
public event EventHandler WorkOn;
}
然后在 MainForm 中,变量 pv(声明为类字段)在方法中被实例化。
pv = new Preview()
之后检查主窗体控件中的用户输入,并在确定时保存在预览类的变量中。
然后,PreviewForm 在 preview 类 中被实例化,拥有类的实例(preview --> as instance pv)作为变量传递给PreviewForm 的实例化。
我必须创建这个重载的构造函数,因为从 PreviewForm 必须向预览类注册一个事件处理程序才能使其工作 - 正如我意识到的那样。
formPreview formPreview = new formPreview(this);
// this --> 是类预览,实例pv
//FormPreview的实例化
public formPreview(Preview preview)
{
InitializeComponent();
this.preview = preview;
// now for the event in the preview class an eventhandling method
// of the preview form is registered:
preview.WorkOn += formPreview_Close;
}
这是FormPreview的注册方法:
private void formPreview_Close(object sender, EventArgs e)
{
this.Close();
}
再次提醒我,事件只能从发布事件的类中引发。所以我不得不在类预览中创建一个公共事件引发方法——这里命名为 OnWorkOn:
public void OnWorkOn()
{
if (WorkOn != null)
WorkOn(this, EventArgs.Empty);
}
最后我可以从按钮内的 MainForm 触发事件,我计划首先注册 PreviewForm 的事件处理方法。
只是现在我不得不使用 MainForm 的类变量 pv,因为它是 MainForm 和 PreviewForm 之间的媒介:
public void buttonWorkOn_Click(object sender, EventArgs e)
{
pv.OnWorkOn();
// raising the event, informing whoever is registered to it
//...
}
所以应用程序的设计不允许直接在 MainForm 上注册预览表单的任何事件处理方法。这就是问题所在,我还没有完全看透整个设计。
嗯——这是德语 C# 教程的成果——我所知道的唯一一个德语教程。
你会在这里找到它:
[https://www.youtube.com/watch?v=-zCiwcgxMHw&list=PLvvL1HRuCBItyw45XnCqEXzuegKQd3MfL][1]
该代码不再可供下载,但我可以提供它。