C# 设置面板对象属性

C# 设置面板对象属性,c#,inheritance,panels,C#,Inheritance,Panels,我正在制作一个名为FMP的Windows窗体应用程序。 我有一个叫做Form1的类,一个叫做Panels的类。 然后我使用继承来创建具有不同属性的不同面板 这样做的原因是因为老师不希望我们初始化Form类中的所有面板 但我不知道该怎么做。在这里@Stackoverflow发现了一些东西,但它们也帮不了我 所有面板的大小、位置和颜色都相同。(单击按钮,将显示另一个面板;) 但是名称、面板上的控件和背景图像是不同的。控件是这里最重要的方面 问题是: 宽度和高度应等于模板的宽度和高度。 编程C#最好的

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

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

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

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

问题是:

宽度和高度应等于模板的宽度和高度。 编程C#最好的方法是什么?在Form1中设置面板的宽度和高度(但我使它们受到保护),或在Panels类中声明表单并使用 表格1.宽度

我有权知道的代码:

表格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.
}

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

  • 名称不应为复数形式,因为类的每个实例明显类似于一个“面板”(一个面板有一个宽度,多个面板没有(一)个宽度)
  • 由于您正在装入WinForms应用程序,因此名称看起来太像
    System.Windows.Forms.Panel
如果我是你,我会让你的基类派生自
System.Windows.Forms.Panel

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

class MyPanel1 : MyPanelBase
{
}
通过这种方式,您可以自动获取
面板的行为(和属性)
,并允许您将其添加到父控件(在您的示例中是表单)中


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

派生,如果面板应该填充整个表单区域,您可以尝试
Panel.Dock=DockStyle.fill。谢谢,DockStyle。填充是一个选项。但是程序没有绘制面板。我想这是因为我无法将其添加到Form1.Controls(this.Controls.add(panels)//错误)谢谢,这应该会有所帮助,I gues:)。但我的面板大小都一样。它们只是在同一时间不可见。@E.Verdi如果您选择该解决方案,您可以在
MyPanelBase
构造函数中设置该大小(或
Dock
属性)。