2013-02-28 84 views
7

我已经阅读了几个堆栈溢出问题,但没有找到解决我的问题的好办法。如何在调整窗体大小时调整控件的大小?当表格变得更大或更小时,我希望它们变得更大或更小。调整窗体大小的控件

在visual basic中,这对于form.Zoom属性(当然不需要调整控件的大小,但解决了我需要的)很容易。不幸的是,这在C#winforms中不可用。

下面是一些其他的事情我已经试过没有运气:

private void formMain_Resize(object sender, EventArgs e) 
{/* 
double scale; 
this.scaleWidth = (float)this.Width/(float)this.origWidth; 
this.scaleHeight = (float)this.Height/(float)this.origHeight; 
if (this.scaleHeight > this.scaleWidth) 
{ 
    scale = this.scaleHeight; 
} 
else 
{ 
    scale = this.scaleWidth; 
} 

foreach (Control control in this.Controls) 
{ 
    control.Height = (int)(control.Height * this.scaleHeight); 
    control.Width = (int)(control.Width * this.scaleWidth); 
    this.Refresh(); 
    // control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio); 
} 
///////This scaling didnt work for me either 
//this.Scale(new SizeF(this.scaleWidth, this.scaleHeight)); 
//this.Refresh(); 
*/ 
} 

如果我在另一个堆栈溢出的问题,我希望能看到它忽视了代码actualy 工作样品,但那些我发现类似于那些不起作用的那些。

也许我在滥用它,并且有人可能会发布示例代码来向我们这些不断问这个问题的人展示如何解决问题。

此外,我试图使用一些锚/对接工具,认为他们会自动允许它,但它没有。

+0

你已经使用了dock和anchor属性.....试着用更好的方式使用它们......他们应该是你成功的关键我猜。我也可以要求提供一个用户界面的屏幕截图吗? – Sandy 2013-02-28 11:05:57

回答

1

我发现了一种替代解决方案,对我来说效果很好,欣赏对解决方案的任何负面或正面评论。

在不同地区的分体容器内部使用多个分体容器和分体容器我可以将布局的主要部分分开,并在那里利用对接和锚定我能够完成我想要做的事 - 它的作品非常漂亮。

我会指出我知道有些人在线提到拆分容器使用大量资源。

5

使用Anchor的控件。锚定顶部,底部,左侧和右侧有一个选项。你很好走。

+1

他说他已经尝试了锚/码头。此外,这个问题意味着他希望所有的控制均衡地扩展。所以这不是问题的答案。 – 2013-02-28 09:54:21

+0

他可能会使用锚/码头。问题是:他是否正确使用了它? – 2013-02-28 10:33:05

+0

我试过锚和停靠,它似乎只是“移动”调整大小的控件,但没有实际调整控件的大小 – Kairan 2013-03-03 07:14:52

1

你在你的代码中试图做的是改变控件的大小,这是不是很好的方法。通常,在重新调整表单大小时,不应更改按钮和文本框的大小,但它们通常需要移动(更改位置)。某些控件需要根据重新调整大小的形式更改大小,但大多数情况下只需一个维度。用于工作区域的中央控件(如果您正在开发绘图工具)应该更改这两个尺寸的大小。所有这些都可以通过正确设置控件的Dock和/或Anchor属性来完成。

textBox1.Dock = DockStyle.Bottom; 
textBox1.Anchor = AnchorStyles.Bottom & AnchorStyles.Left; 

当使用设计器时,所有这些也很容易在属性面板中设置。

但是,如果这是不够的你,在极少数情况下,你肯定会想只改变控件的位置:

textBox1.Location = new Point(newX, newY); 
15

最好的办法是使用TableLayoutPanel。将TableLayoutPanel放在窗体上,将Dock属性设置为Fill,创建所需的行和列,并将控件放入单元格中。当然,您需要在单元格内的控件上设置Dock/Anchor,以便它们响应单元格大小的更改。在某些情况下,您可能需要将Panel放入单元格中,并将控件放入其中,因为每个单元格只能包含一个控件。您可能还需要在控件上设置RowSpan/ColumnSpan

通过使用TableLayoutPanel,您可以完全控制应该如何排列cotrols。您可以设置行和列的绝对大小或百分比大小。

1

如果您的控件位于组框中,请务必设置组框属性以调整其大小。包装箱内的控件由箱子控制。箱子的大小(除非它在另一个箱子内)由窗体控制。