这是我的代码
GeneralLesson.cs :它只是一个.cs文件,没有.Designer.cs或.resx文件
public /*abstract*/ class GeneralLesson : Form
{
public GeneralLesson()
{
this.StartPosition = SS.FrmStartPos;//If I want to change it later, I just change it here and all the children will get the change
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown) return;
SS.LearningDay = 0; //SS is my static class that hold the static variables.
SS.FrmMain.Show();
}
}
SentLesson.cs :这实际上是一个带有.Designer.cs和.resx文件的Windows窗体
public partial class _Sent_Lesson : GeneralLesson
{
public _Sent_Lesson()
{
InitializeComponent();
richTextBox1.Text = "under construction";
}
}
所以它实际上很符合我的目的。我的SentLesson窗口继承了GeneralLesson的构造函数和OnFormClosing。但问题是我无法再设计我的SentLesson窗口了,如下图所示:
也许我做错了。但我不想将GeneralLesson创建为Window,因为我没有设计任何控件,我只想覆盖一些函数,如OnFormClosing或Constructor。如果不将GeneralLesson作为一个窗口,我有什么方法可以做到这一点。
感谢阅读。
答案 0 :(得分:0)
我终于得到了解决方案。即使抽象的父表单仍然在逻辑上工作,但子表单不能用Visual Studio设计器进一步设计。所以我必须以Visual Studio方式继承表单。
如您所见,Visual Studio为我们提供了Inherited Form来创建Children表单。因此,我将GeneralLesson.cs创建为Windows窗体,将SentLesson.cs创建为继承窗体。因此,SentLesson从GeneralLesson继承了构造函数和OnFormClosing,并且SentLesson的设计者不再显示错误。
如果您希望子窗体可以从父窗体访问某些控件,请说父母"按钮A"。只需设置父母"按钮A"属性窗口中的修改器从专用到受保护。然后你可以在儿童表格中使用按钮A做任何事情。
感谢您的阅读。