Tôi có Biểu mẫu và DataGridView. Tôi cư các DataGridView tại thời gian chạy, vì vậy tôi muốn biết làm thế nào để tôi thay đổi kích cỡ các hình thức động theo kích thước của DataGridView? Có bất kỳ loại tài sản hoặc phương pháp nào không? Hay tôi phải tự xác định kích thước và cập nhật cho phù hợp?C# Tự động đổi kích cỡ biểu mẫu thành kích thước của DataGridView
Trả lời
Điều khiển thông thường thích ứng với kích thước của chúng theo kích thước của biểu mẫu có chứa. Để điều chỉnh kích thước biểu mẫu của bạn thành kích thước của DataGridView, bạn do phải tự xác định kích thước và sau đó đặt kích thước của biểu mẫu để khớp, nhớ tính đến kích thước bổ sung được yêu cầu bởi dải trình đơn của biểu mẫu và/hoặc thanh công cụ, thanh trạng thái hoặc các điều khiển khác.
Trong trường hợp của bạn, có lẽ tốt nhất là không thay đổi kích thước biểu mẫu để khớp với điều khiển chế độ xem lưới. Nhiều khả năng, bạn sẽ có nhiều hàng hơn trong chế độ xem lưới của mình hơn là có thể vừa với màn hình Windows và bạn không muốn có biểu mẫu mở rộng bên dưới khu vực màn hình có thể xem. Nói chung, loại tình huống này chính xác là lý do tại sao bạn muốn có chế độ xem lưới có thể cuộn - để xem nhiều dữ liệu hơn có thể vừa với màn hình cùng một lúc.
"Để điều chỉnh kích thước của biểu mẫu của bạn thành kích thước của DataGridView, bạn phải tự xác định kích thước" Có cách nào để làm điều đó không xin vui lòng? DataGridView của tôi chỉ có một vài ô và nó chỉ đọc. Thay đổi kích thước hình thức để phù hợp là không có vấn đề gì cả, ngoại trừ tôi không biết bao nhiêu điểm ảnh DGV cần. Rất cám ơn. – billpg
Bạn có thể tìm chiều rộng thực tế bằng cách đếm Chiều rộng cột.
Đừng quên rằng biểu mẫu của bạn có thể phức tạp hơn và bạn nên tính các điều khiển khác.
public class YourForm : Form
{
public YourForm()
{
DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill};
Controls.Add(_dgv);
}
public void CorrectWindowSize()
{
int width = WinObjFunctions.CountGridWidth(_dgv);
ClientSize = new Size(width, ClientSize.Height);
}
DataGridView _dgv;
}
public static class WinObjFunctions
{
public static int CountGridWidth(DataGridView dgv)
{
int width = 0;
foreach (DataGridViewColumn column in dgv.Columns)
if (column.Visible == true)
width += column.Width;
return width += 20;
}
}
Tôi sẽ đi theo hướng khác và định kích thước lưới thành biểu mẫu. (một số người dùng có thể có tỷ lệ thấp) Đặt thuộc tính 'WindowState' của biểu mẫu => tối đa hóa. (tùy chọn) Đặt thuộc tính 'neo' của DGV => 'Trên cùng, Dưới, Trái, Phải'.
Bạn có thể sử dụng thuộc tính PreferredSize
(MSDN PreferredSize entry). Đối với các điều khiển DataGridView
, tôi thấy rằng chiều rộng và chiều cao ưa thích lớn hơn khoảng 20 đơn vị so với tôi mong đợi. Tôi đoán rằng điều khiển có thể tính toán kích thước ưa thích của nó khi sử dụng thanh cuộn.
Một cảnh báo khác mà tôi phát hiện là tính toán PreferredSize
sẽ không chính xác ngay lập tức sau khi thêm hoặc thay đổi các mục trong bảng. Để giải quyết vấn đề này, tôi đã xử lý sự kiện RowHeadersWidthChanged
.
Đây là những gì làm việc cho tôi:
class GridToy {
private DataGridView grid;
public GridToy(DataGridView dgv) {
grid = dgv;
grid.RowHeadersWidthChanged += AdjustWidth; // Event handler.
Layout();
}
public void Layout() {
// Just do some arbitrary manipulation of the grid.
grid.TopLeftHeaderCell.Value = "Some Arbitrary Title";
}
public void AdjustWidth() {
Control horizontal = grid.Controls[0]; // Horizontal scroll bar.
Control vertical = grid.Controls[1]; // Vertical scroll bar.
grid.Width = grid.PreferredSize.Width - vertical.Width + 1;
grid.Height = grid.PreferredSize.Height - horizontal.Height + 1;
}
}
Tôi không chắc liệu RowHeadersWidthChanged là sự kiện tốt nhất để lắng nghe, nhưng có vẻ như để hoàn thành công việc. – amacleod
Hmm. Thử nghiệm tiếp theo cho thấy 'PreferredSize' cũng tính đến chiều rộng của tiêu đề hàng, ngay cả khi' RowHeadersVisible' là sai. Có vẻ như ghép lại với nhau, tổng kích cỡ bằng tay sẽ đáng tin cậy hơn. – amacleod
dataGridView1.AutoResizeColumns (DataGridViewAutoSizeColumnsMode.AllCells);
Hope this helps :)
int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
this.Width = dgv_width;
this.Height = dgv_height;
this.Width
thay đổi kích thước chiều rộng Mẫu này.
Tất nhiên bạn phải thêm các giá trị cố định (ví dụ lề, Dạng mẫu heigth, ecc.). Với các bài kiểm tra tôi đã đạt đến giá trị làm việc cho tôi (đừng hỏi tại sao ...):
this.Width = dgv_width + 147;
this.Height = dgv_height + 47;
Bạn có thể thiết lập các tài sản "Chiều cao" để tự động theo hình thức sau phân loại hoặc sử dụng một ID và điều này nên làm điều đó ,,
Tôi vừa thử nó ..và Nó hoạt động
#form1{
background-color:white;
height:auto;
width:1500px;
border-top:medium solid #3399FF;
margin-top:100px;
margin-left:30px;
display: inline-block;
text-align: center;
float: none;
}
Tôi chỉ đặt chính xác những gì tôi đã làm trong trường hợp bạn bị lạc .. Đừng lo lắng về các thuộc tính khác có trong thiết kế của tôi.
Đặt AutoSizeColumnsMode :Fill
trong thuộc tính lưới
- 1. Cách tự động thay đổi kích thước lưới khi biểu mẫu được thay đổi kích thước?
- 2. Cột tự động thay đổi kích thước thành kích thước của QTableView
- 3. Biểu tượng JButton tự động thay đổi kích thước
- 4. tự động thay đổi kích thước văn bản (cỡ chữ) khi thay đổi kích thước cửa sổ?
- 5. Kích thước thay đổi kích cỡ tinym dọc chỉ
- 6. Thay đổi kích thước điều khiển bằng biểu mẫu Thay đổi kích thước
- 7. thay đổi kích thước và điều chỉnh điều khiển biểu mẫu theo biểu mẫu đổi kích thước
- 8. Thay đổi kích cỡ mảng bằng C
- 9. Thay đổi kích cỡ UIImage và thay đổi kích thước của UIImageView
- 10. cách tự động thay đổi kích cỡ bootstrap-wysihtml5
- 11. Người dùng không thể thay đổi kích thước cột DataGridView
- 12. Chỉnh sửa kích thước tự động của Gridpanel khi thay đổi kích thước cửa sổ
- 13. Tự động thay đổi kích thước div dựa trên kích thước của cửa sổ trình duyệt
- 14. Thay đổi kích cỡ vector của STL
- 15. Swing GroupLayout: Thay đổi kích thước và giới hạn kích thước thành phần
- 16. Tự động thay đổi kích thước hàng TableLayoutPanel khi cửa sổ được thay đổi kích thước
- 17. UIImageView: Thay đổi kích thước thành kích thước hình ảnh?
- 18. Tự động hoàn tất có thể thay đổi kích thước
- 19. DataGridView cột tự động điều chỉnh chiều rộng và thay đổi kích thước
- 20. Lưu Kích thước Biểu mẫu Windows
- 21. Điều chỉnh kích thước của biểu mẫu thành văn bản tiêu đề trong C#
- 22. Ngăn người dùng thay đổi kích thước cửa sổ/kích thước biểu mẫu
- 23. Ảnh chụp màn hình của biểu mẫu có kích thước lớn hơn kích thước màn hình
- 24. Điều gì ngăn cản tôi thay đổi kích thước (giảm kích thước) cửa sổ của tôi tạo thành đối tượng?
- 25. Làm cách nào để sửa kích thước biểu mẫu trong ứng dụng Biểu mẫu Windows C và không cho phép người dùng thay đổi kích thước của nó?
- 26. WinForms DataGridView cỡ chữ
- 27. Lưu và Khôi phục Vị trí và Kích cỡ của Biểu mẫu
- 28. Thay đổi kích cỡ hình ảnh động giữa NSView
- 29. Tự động thay đổi kích thước phần tử với kích thước cửa sổ jquery
- 30. C# thay đổi kích thước cột datagridview để vừa với điều khiển
Làm cách nào để "tự xác định kích thước"? Tôi chỉ cần biết có bao nhiêu điểm ảnh mà DGV "muốn". (Tôi có thể đặt các giới hạn hợp lý để ngăn mẫu không quá lớn.) – billpg