2012-09-20 159 views
0

我有一个家庭作业,我需要使用C#创建一个winforms游戏。我有以下组成部分:固定大小的面板

  • 面板子类的自定义油漆事件
  • 面板与默认的Windows用户界面元素。

我希望他们这样安排:

enter image description here

因为我手动在中央面板上绘制的,我想设置它的WidthHeight固定,所以Form子类,会出现什么包含它,会显示整个面板。

我试图在面板子类手动设定尺寸:

Width = someFixedWidth; 
Height = someFixedHeight; 

然后将其添加到含Form

GamePanel panel = new GamePanel(...); 
panel.Dock = DockStyle.Center; 
this.AutoSize = true; 
this.AutoSizeMode = AutoSizeMode.GrowAndShrink; 
this.Controlls.Add(panel); 

利用这一点,我想,该形式将尊重大小但它只是将窗口缩小到很小,以至于看不见任何东西,只有标题。

所以我的问题是,我将如何手动设置GamePanel的大小,然后将它停靠在窗体的中心,以便表单将尊重我设置的大小,并且不会使它更小/更大?

+0

你已经在做窗体大小调整。那么为什么你需要停靠面板。您的表单大小应该等于两个面板的大小总和。所以我预计在这种情况下没有左右边距。那么为什么你需要面板的对接? – Sami

+0

将它放在窗体上并移除所有锚点。 – ja72

回答

1

Dock属性用于在调整大小时定义组件的行为Container(Form)您执行屏幕的方式不是集中式的,而是根据屏幕更改调整大小,理想的是使用方法重新定位控制并设置其大小。看到这个:

SuspendLayout(); 

Width = someFixedWidth; 
Height = someFixedHeight; 

panel.Size = new Size(panelWidth, panelHeight); 

panel.Location = new Point(ClientSize.Width/2 - panelWidth/2, ClientSize.Height/2 - panelHeight/2); 
panel.Anchor = AnchorStyles.None; 
panel.Dock = DockStyle.None; 

ResumeLayout(); 
+0

固定位置,并且解除了对接问题。我希望有更复杂的方法来做到这一点,但winforms布局系统每次都会让我惊喜,我发现了一些新的东西:( –

0

在我的情况下,我编辑了面板的最小高度/宽度,它的工作。

我试着编辑与设计有关的代码,但不建议重写自动生成的代码。

谢谢。