我有一个继承自System.Windows.Forms.Form
的类
public partial class RAT : Form
并有另一个类继承自RAT
class CAD : RAT
当我创建 CAD
实例时,我希望更改 RAT
(实际上是 from)大小,当我处置 CAD
时> 对象,我想要RAT
恢复到原来的状态。
CAD
构造函数:
public CAD()
{
base.Size = new System.Drawing.Size(805, 700);
}
CAD
析构函数:
~CAD()
{
base.Size = new System.Drawing.Size(805, 300);
}
但问题是,它没有执行这段代码。它不会更新表单的大小
。但是当我在 RAT
中更新它时,它工作得很好:
CAD CADObject = new CAD();
this.Size = new System.Drawing.Size(805, 700);
我认为我正在以正确的方式访问父类成员。那么可能是什么问题呢?
附加:
之后我尝试从 CAD
构造函数添加控件:
public CAD()
{
TextBox sample = new TextBox();
sample.Multiline = true;
sample.Location = new System.Drawing.Point(50, 500);
sample.Size = new System.Drawing.Size(50, 100);
base.Controls.Add(sample); //here `base` refers to `RAT` class
}
但是这段代码并没有很好地工作。
整个场景:
RAT
是表单。 CAD
是一个继承自RAT
的简单类。 CAD
对象是通过从 RAT
单击按钮创建的。 CAD
具有该程序的一些额外功能,因此我想通过向 RAT
添加一些附加控件并增加其大小来更新 RAT
的 UI ,并从 CAD
methods
和 properties
更新它们。
程序非常简单。我只想从子类访问父成员。我知道我可以在 RAT 中完成这一切,但我试图从子类访问它。这应该有效。
完整代码:
namespace RAT_Controller
{
public partial class RAT : Form
{
public RAT()
{
InitializeComponent();
}
CAD CADObject;
bool CADObjectCreated = false;
private void btnCADInitializer_Click(object sender, EventArgs e)
{
if (!CADObjectCreated)
{
CADObject = new CAD();
CADObjectCreated = true;
}
else
{
CADObject.Dispose();
CADObjectCreated = false;
}
}
}
class CAD : RAT
{
public CAD()
{
base.Size = new System.Drawing.Size(805, 700); //updating form size
sample = new TextBox();
sample.Multiline = true;
sample.Location = new System.Drawing.Point(50, 500);
sample.Size = new System.Drawing.Size(50, 100);
base.Controls.Add(sample); //adding control to form
}
TextBox sample;
~CAD()
{
sample.Dispose();
base.Controls.Remove(sample); //removing control from form
base.Size = new System.Drawing.Size(805, 300); //updating form size
}
}
}
最佳答案
CAD
是一种全新的表单,您永远不会显示它。屏幕上的形式永远不会改变。您不应让 CAD
继承于 RAD
,而应为其指定一个字段 RAD form
,并通过该字段访问该表单。
您还有一个可疑的终结器。当您期望它运行时,它不会运行,而当它运行时,我怀疑它不会执行您想要的操作。特别是,当您调用 Dispose
时,它不会立即被调用。
class CAD
{
RAT form;
public CAD(RAT form)
{
this.form = form;
// Now the CAD class maintains a reference to the form it is
// supposed to change. This field can be used in other methods
// when it is time to remove the extra controls and restore
// the size, like so:
// form.Size = new System.Drawing.Size(805, 300);
}
}
关于c# - 继承:访问父成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357927/