0

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

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

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

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

问题是:

宽度和高度应等于窗体的宽度和高度。什么是最好的 C# 编程?要从 Form1 中的面板设置宽度和高度(但我将它们设为保护)或在面板类中声明表单并使用 Form1.Width?

我正确知道的代码:

表格 1

    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.
}
4

1 回答 1

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.

于 2013-11-07T12:35:01.040 回答