2013-02-28 55 views
7

Tôi đã đọc một số câu hỏi tràn ngăn xếp mà không tìm ra giải pháp làm việc tốt cho vấn đề của tôi. Làm cách nào tôi có thể thay đổi kích thước các điều khiển của tôi bất cứ khi nào biểu mẫu được thay đổi kích thước? Tôi muốn chúng trở nên lớn hơn hoặc nhỏ hơn khi biểu mẫu trở nên lớn hơn hoặc nhỏ hơn.Thay đổi kích thước điều khiển bằng biểu mẫu Thay đổi kích thước

Trong hình ảnh cơ bản này khá dễ dàng để làm với các tài sản form.Zoom (mà did't thực sự yêu cầu thay đổi kích thước điều khiển của khóa học, nhưng giải quyết những gì tôi cần). Thật không may điều này là không có sẵn trong C# winforms.

Dưới đây là một số những thứ khác tôi đã cố gắng mà không may mắn:

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(); 
*/ 
} 

Nếu tôi bỏ qua một mẫu actualy làm việc mã trên một câu hỏi stack overflow Tôi rất thích nhìn thấy nó, nhưng những cái tôi tìm thấy tương tự như những điều trên không hoạt động.

Có lẽ tôi đã lạm dụng nó và ai đó có thể đăng mã mẫu để hiển thị cho những người trong chúng tôi tiếp tục đặt câu hỏi này cách giải quyết vấn đề.

Ngoài ra, tôi đã thử sử dụng một số công cụ neo/docking nghĩ rằng chúng sẽ tự động cho phép nhưng không.

+0

bạn đã sử dụng thuộc tính neo và neo ..... hãy thử sử dụng chúng theo cách tốt hơn .... chúng phải là chìa khóa của bạn để thành công mà tôi đoán. Ngoài ra tôi có thể yêu cầu một ảnh chụp màn hình giao diện người dùng của bạn không? – Sandy

Trả lời

1

Tôi tìm thấy giải pháp thay thế hoạt động tốt cho tôi, đánh giá cao bất kỳ nhận xét tiêu cực hoặc tích cực nào về giải pháp.

Sử dụng một số vùng chứa phân chia và ngăn chứa phân chia bên trong vùng chứa phân chia ở các vùng khác nhau, tôi có thể tách các phần chính của bố cục và trong đó sử dụng Docking and Anchoring tôi có thể thực hiện chính xác những gì tôi muốn thực hiện nó hoạt động rất đẹp.

Tôi sẽ chỉ ra rằng tôi biết rằng một số người trực tuyến đề cập đến các vùng chứa chia nhỏ sử dụng nhiều tài nguyên.

5

Sử dụng Anchor kiểm soát. Có một tùy chọn để neo đầu, dưới, trái và phải. Và bạn tốt để đi.

+1

Ông nói rằng ông đã cố gắng neo/bến cảng rồi. Ngoài ra câu hỏi ngụ ý rằng ông muốn tất cả các điều khiển để quy mô thống nhất. Vì vậy, đây không phải là câu trả lời cho câu hỏi. –

+0

Ông có thể sử dụng neo/bến cảng. Câu hỏi đặt ra là: anh ta đã sử dụng nó một cách chính xác? –

+0

Tôi đã cố gắng neo và neo và có vẻ như chỉ "di chuyển" các điều khiển xung quanh thay đổi kích thước, nhưng không thay đổi kích thước thực tế các điều khiển – Kairan

1

Điều bạn đang cố gắng thực hiện trong mã của mình là thay đổi kích thước của các điều khiển không tiếp cận tốt như vậy. Nói chung, kích thước của các nút và hộp văn bản không nên thay đổi khi bạn tái kích thước biểu mẫu của bạn, nhưng chúng thường cần phải di chuyển (thay đổi vị trí). Một số điều khiển cần phải thay đổi kích thước theo hình thức kích thước lại và trong hầu hết các trường hợp chỉ có một kích thước. Các điều khiển trung tâm được sử dụng cho khu vực làm việc (nếu bạn đang phát triển công cụ để vẽ ví dụ) nên thay đổi kích thước của cả hai chiều. Tất cả điều này bạn có thể thực hiện bằng cách thiết lập đúng các thuộc tính Dock và/hoặc Anchor của các điều khiển.

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

Tất cả những điều này cũng dễ dàng được đặt trong bảng Thuộc tính khi sử dụng thiết kế.

Nhưng nếu đó là không đủ cho bạn, trong trường hợp hiếm hoi, bạn sẽ chắc chắn nhất muốn chỉ thay đổi vị trí của điều khiển:

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

Các lựa chọn tốt nhất là sử dụng một TableLayoutPanel. Đặt TableLayoutPanel vào biểu mẫu, đặt thuộc tính Dock thành Fill, tạo các hàng và cột được yêu cầu và đặt các điều khiển bên trong các ô. Tất nhiên bạn cần phải đặt Dock/Anchor trên các điều khiển bên trong các ô, vì vậy chúng phản ứng với những thay đổi đối với kích thước ô. Trong một số trường hợp, bạn có thể cần phải đặt Panel vào một ô và thả các điều khiển bên trong ô, vì mỗi ô chỉ có thể chứa một điều khiển duy nhất. Bạn cũng có thể cần đặt RowSpan/ColumnSpan trên các nút điều khiển.

Bằng cách sử dụng số TableLayoutPanel, bạn có toàn quyền kiểm soát cách bố trí cũi của mình. Bạn có thể đặt kích thước phần trăm hoặc tuyệt đối cho các hàng và cột.

1

Nếu điều khiển của bạn nằm trong hộp nhóm, hãy đảm bảo đặt thuộc tính hộp nhóm để đổi kích thước. Các điều khiển bên trong hộp được điều khiển bởi hộp. Kích thước hộp (trừ khi nó nằm trong một hộp khác) được điều khiển bởi biểu mẫu.

Các vấn đề liên quan