【问题标题】:Setting panel-objects properties设置面板对象属性
【发布时间】:2013-11-07 09:15:38
【问题描述】:

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

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

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

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

问题是:

宽度和高度应该等于表单的宽度和高度。 什么是最好的 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.
}

【问题讨论】:

  • 如果面板应该填满整个表单区域,您可能想尝试panel.Dock = DockStyle.Fill;
  • 谢谢 DockStyle.Fill 是一个选项。但是程序不会绘制面板。我认为这是因为我无法将其添加到 Form1.Controls ( this.Controls.Add(panels) //Error )

标签: c# inheritance panels


【解决方案1】:

使用名称 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 派生。

【讨论】:

  • 谢谢,我猜这应该会有所帮助:)。但是我的面板尺寸都一样。它们只是不同时可见。
  • @E.Verdi 您可以在 MyPanelBase 构造函数中设置该大小(或 Dock 属性),如果您选择该解决方案。
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多