设置面板对象属性

时间:2013-11-07 09:15:39

标签: c# inheritance panels

我正在制作名为FMP的Windows窗体应用程序。 我有一个名为Form1的类,一个名为Panels的类。 然后我使用继承来制作具有不同属性的不同Panel。

这样做的原因是教师不希望我们初始化Form-class中的所有面板。

但我不知道该怎么做。在@Stackoverflow找到了一些东西,但他们也无法帮助我。

所有面板的尺寸,位置和颜色都相同。 (通过单击按钮,将出现另一个面板;)) 但是面板上的名称,控件和BackgroundImages是不同的。控件是这里最重要的方面。

问题是:

宽度和高度应等于表格中的Widht和Height。 编程C#最擅长什么?从Form1中的面板设置宽度和高度(但我保护它们)或在Panels类中声明表单并使用 Form1.Width?

我正确知道的代码:

Form1

    public Form1()
    {
        InitializeComponent();
        buttonsProperties();
        panelsProperties();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        panelsChanged(1);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        panelsChanged(2);
    }
    private void panelsChanged(int panelNr)
    {
        if (panelNr == 1)
        {
            panel1.Visible = true;
            panel1.Enabled = true;
            panel2.Visible = false;
            panel2.Enabled = false;
        }
        else if (panelNr == 2)
        {
            panel1.Visible = false;
            panel1.Enabled = false;
            panel2.Visible = true;
            panel2.Enabled = true;
        }
}

小组

class Panels
{
    Form1 f = new Form1();
    //Color Property
    protected Color color { get; set; }
    //Size
    protected Int32 Width { get; set; }
    protected Int32 Height{ get; set; }
    //Location
    protected Point Location { get; set; }
    public Panels()
    {
        initMembers();
    }

    private void initMembers()
    {
        this.Width = f.Width;
        this.Height = f.Height;
        this.Location = new Point(0, 0);
    }
}
public class Panel1 : Panels
{
    //Nothing yet.
}

1 个答案:

答案 0 :(得分:0)

使用名称Panels作为每个面板的基类令人困惑:

  • 该名称不应为复数形式,因为该类的每个实例都明显类似于一个“面板”(面板具有宽度,多个面板不具有有(一)宽度)
  • 由于您正在创建WinForms应用程序,因此该名称看起来太像System.Windows.Forms.Panel

如果我是你,我会让您的基类派生自System.Windows.Forms.Panel

abstract class MyPanelBase : Panel
{
    public MyPanelBase()
    {
        Dock = DockStyle.Fill;
    }
}

class MyPanel1 : MyPanelBase
{
}

这样您就可以自动获取Panel的行为(和属性),并允许您将其添加到父控件(在您的情况下,表单中)。

如果Panel已经支持您想要的所有功能,您甚至可以跳过MyPanelBase位并让MyPanel1直接从Panel派生。