Làm cách nào để đặt chiều rộng cột của listview
điều khiển ac # winforms thành tự động. Một cái gì đó như chiều rộng = -1 / -2?
Câu trả lời:
Bạn đã đưa ra câu trả lời: -2 sẽ tự động điều chỉnh cột theo độ dài của văn bản trong tiêu đề cột, -1 sẽ tự động điều chỉnh kích thước cho mục dài nhất trong cột. Tất cả theo MSDN . Lưu ý rằng trong trường hợp -1, bạn sẽ cần đặt chiều rộng cột sau khi thêm (các) mục. Vì vậy, nếu bạn thêm một mục mới, bạn cũng sẽ cần phải gán thuộc tính chiều rộng của cột (hoặc các cột) mà bạn muốn tự động kích thước theo dữ liệu trong ListView
kiểm soát.
Dùng cái này:
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
từ đây
Tôi đã thực hiện một chương trình xóa và điền lại lần xem danh sách của mình nhiều lần. Vì một số lý do bất cứ khi nào tôi thêm các cột có chiều rộng = -2, tôi gặp sự cố với cột đầu tiên quá dài. Những gì tôi đã làm để khắc phục điều này là tạo ra phương pháp này.
private void ResizeListViewColumns(ListView lv)
{
foreach(ColumnHeader column in lv.Columns)
{
column.Width = -2;
}
}
Điều tuyệt vời về phương pháp này là bạn có thể đặt nó ở bất cứ đâu để thay đổi kích thước tất cả các cột của bạn. Chỉ cần vượt qua của bạn ListView
.
Có một phương pháp hữu ích khác được gọi là AutoResizeColumn
cho phép bạn tự động kích thước một cột cụ thể với tham số bắt buộc.
Bạn có thể gọi nó như thế này:
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
Mở rộng một chút về câu trả lời của Fredrik, nếu bạn muốn đặt nhanh chiều rộng tự động thay đổi kích thước của cột, ví dụ: đặt chiều rộng kích thước tự động của cột đầu tiên thành 70:
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
Giải pháp này trước tiên sẽ thay đổi kích thước các cột dựa trên dữ liệu cột, nếu chiều rộng được thay đổi kích thước nhỏ hơn kích thước tiêu đề, nó sẽ thay đổi kích thước các cột để ít nhất vừa với tiêu đề. Đây là một giải pháp khá xấu, nhưng nó hoạt động.
lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width);
colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width);
colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width);
colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width);
lstContacts là ListView. colFirstName là một cột, trong đó 60 là chiều rộng bắt buộc để vừa với tiêu đề. Vân vân.
Nếu bạn có ListView trong bất kỳ bảng Parent nào (lấp đầy dock ListView), bạn có thể sử dụng phương pháp đơn giản ...
private void ListViewHeaderWidth() {
int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
foreach (ColumnHeader header in listViewInfo.Columns)
{
header.Width = HeaderWidth;
}
}
Bạn có thể sử dụng một cái gì đó như thế này, chuyển ListView bạn muốn vào param
private void AutoSizeColumnList(ListView listView)
{
//Prevents flickering
listView.BeginUpdate();
Dictionary<int, int> columnSize = new Dictionary<int,int>();
//Auto size using header
listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
//Grab column size based on header
foreach(ColumnHeader colHeader in listView.Columns )
columnSize.Add(colHeader.Index, colHeader.Width);
//Auto size using data
listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
//Grab comumn size based on data and set max width
foreach (ColumnHeader colHeader in listView.Columns)
{
int nColWidth;
if (columnSize.TryGetValue(colHeader.Index, out nColWidth))
colHeader.Width = Math.Max(nColWidth, colHeader.Width);
else
//Default to 50
colHeader.Width = Math.Max(50, colHeader.Width);
}
listView.EndUpdate();
}
Cũng cần lưu ý rằng ListView có thể không hiển thị như mong đợi nếu không thay đổi thuộc tính trước:
myListView.View = View.Details; // or View.List
Đối với tôi Visual Studio dường như mặc định nó thành View.LargeIcon vì một số lý do nên không có gì xuất hiện cho đến khi nó được thay đổi.
Hoàn thành mã để hiển thị một cột duy nhất trong ListView và cho phép không gian cho thanh cuộn dọc.
lisSerials.Items.Clear();
lisSerials.View = View.Details;
lisSerials.FullRowSelect = true;
// add column if not already present
if(lisSerials.Columns.Count==0)
{
int vw = SystemInformation.VerticalScrollBarWidth;
lisSerials.Columns.Add("Serial Numbers", lisSerials.Width-vw-5);
}
foreach (string s in stringArray)
{
ListViewItem lvi = new ListViewItem(new string[] { s });
lisSerials.Items.Add(lvi);
}
Tôi tin rằng tác giả đang tìm kiếm một phương pháp tương đương thông qua IDE sẽ tạo mã phía sau và đảm bảo tất cả các tham số đều ở đúng vị trí, v.v. Tìm thấy điều này từ MS:
Tạo trình xử lý sự kiện trên Windows Forms Designer
Bản thân xuất thân từ nền tảng VB, đây là những gì tôi đang tìm kiếm, đây là phiên bản ngắn gọn cho nhấp chuột bất lợi:
- Bấm vào biểu mẫu hoặc điều khiển mà bạn muốn tạo trình xử lý sự kiện.
- Trong cửa sổ Thuộc tính, nhấp vào nút Sự kiện
- Trong danh sách các sự kiện có sẵn, hãy bấm vào sự kiện mà bạn muốn tạo trình xử lý sự kiện.
- Trong hộp ở bên phải của tên sự kiện, hãy nhập tên của trình xử lý và nhấn ENTER
myListView.Columns[0].Width = -1;