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