2

我有一个继承自的类System.Windows.Forms.Form

public partial class RAT : Form

并继承另一个类RAT

class CAD : RAT

当我创建 的实例时CAD,我希望RAT(实际上是从)大小改变,而当我处置CAD对象时,我想RAT回到原来的。

CAD构造函数:

    public CAD()
    {            
        base.Size = new System.Drawing.Size(805, 700);
    }

CAD析构函数:

    ~CAD()
    {
        base.Size = new System.Drawing.Size(805, 300);
    }

但问题是,它没有执行这段代码。它没有更新size表单。但是当我更新它时,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对象是在单击按钮时创建的RATCAD该程序有一些额外的功能,所以我想通过添加一些额外的控件并增加它的大小来更新它RAT的 UI ,并从和更新它们。RATCAD methodsproperties

该程序非常简单。我只想从子类访问父成员。我知道我可以做到这一切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
        }
    }
}
4

1 回答 1

2

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);
    }
}
于 2013-06-28T06:38:33.333 回答