2013-02-28 189 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

如果您的控件位於組框中,請務必設置組框屬性以調整其大小。包裝箱內的控件由箱子控制。箱子的大小(除非它在另一個箱子內)由窗體控制。

相關問題