Ac # winforms listview
kontrolünün sütun genişliğini otomatik olarak nasıl ayarlayabilirim . Genişlik = -1 / -2 gibi bir şey?
Yanıtlar:
Cevabı verdiniz: -2, sütunu sütun başlığındaki metnin uzunluğuna otomatik olarak boyutlandıracak, -1 sütundaki en uzun öğeye otomatik boyutlandırılacaktır. Hepsi MSDN'ye göre . -1 durumunda, öğe (ler) i ekledikten sonra sütun genişliğini ayarlamanız gerekeceğini unutmayın. Bu nedenle, yeni bir öğe eklerseniz, denetimdeki verilere göre otomatikleştirmek istediğiniz sütunun (veya sütunların) genişlik özelliğini de atamanız gerekir ListView
.
Bunu kullan:
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
dan burada
Liste görünümümü birçok kez temizleyen ve yeniden dolduran bir program yaptım. Bazı nedenlerden dolayı, genişlik = -2 olan sütunları her eklediğimde, ilk sütunun çok uzun olmasıyla ilgili bir sorunla karşılaştım. Bunu düzeltmek için yaptığım şey bu yöntemi oluşturmaktı.
private void ResizeListViewColumns(ListView lv)
{
foreach(ColumnHeader column in lv.Columns)
{
column.Width = -2;
}
}
Bu yöntemle ilgili harika olan şey, tüm sütunlarınızı yeniden boyutlandırmak için bunu hemen hemen her yere koyabilmenizdir. Sadece geç ListView
.
Herhangi bir Üst panelde ListView varsa (ListView dock dolgusu), basitçe yöntemi kullanabilirsiniz ...
private void ListViewHeaderWidth() {
int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
foreach (ColumnHeader header in listViewInfo.Columns)
{
header.Width = HeaderWidth;
}
}
AutoResizeColumn
Gerekli parametre ile belirli bir sütunu otomatik olarak boyutlandırmanıza izin veren başka bir kullanışlı yöntem vardır .
Şöyle diyebilirsiniz:
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
Sütunun otomatik yeniden boyutlandırma genişliğini anında ayarlamak istiyorsanız, Fredrik'in cevabını biraz genişletmek, örneğin: ilk sütunun otomatik boyut genişliğini 70 olarak ayarlamak:
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
Bu çözüm önce sütunları sütun verilerine göre yeniden boyutlandıracak, yeniden boyutlandırılan genişlik başlık boyutundan küçükse sütunları en azından başlığa sığacak şekilde yeniden boyutlandıracaktır. Bu oldukça çirkin bir çözüm ama işe yarıyor.
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, ListView'dir. colFirstName, 60'ın başlığa sığması için gereken genişlik olduğu bir sütundur. Vb.
Bunun gibi bir şey kullanabilirsiniz, istediğiniz ListView'ü param olarak geçirebilirsiniz.
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();
}
Ayrıca, özelliği değiştirmeden ListView'ün beklendiği gibi görüntülenmeyebileceğini de belirtmek gerekir:
myListView.View = View.Details; // or View.List
Benim için Visual Studio, herhangi bir nedenle View.LargeIcon olarak varsayılan olarak görünüyor, bu nedenle değiştirilene kadar hiçbir şey görünmüyor.
ListView'da tek bir sütun göstermek ve dikey bir kaydırma çubuğu için alan sağlamak için kodu tamamlayın.
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);
}
Yazarın, IDE aracılığıyla arkasındaki kodu oluşturacak ve tüm parametrelerin yerinde olmasını sağlayacak eşdeğer bir yöntem aradığına inanıyorum. Bunu MS'den buldum:
Windows Forms Designer'da Olay İşleyicileri Oluşturma
Kendim bir VB geçmişinden geliyorum, aradığım şey buydu, işte tıklama tersinin kısa versiyonu:
- Olay işleyicisi oluşturmak istediğiniz formu veya denetimi tıklayın.
- Özellikler penceresinde, Olaylar düğmesini tıklayın
- Mevcut olaylar listesinde, olay işleyicisi oluşturmak istediğiniz olayı tıklayın.
- Olay adının sağındaki kutuya işleyicinin adını yazın ve ENTER tuşuna basın
myListView.Columns[0].Width = -1;