मैं listview
स्वत: नियंत्रण के लिए एसी # winforms के कॉलम की चौड़ाई कैसे निर्धारित कर सकता हूं । चौड़ाई जैसा कुछ = -1 / -2?
जवाबों:
आपने उत्तर दिया: -2 कॉलम हेडर में टेक्स्ट की लंबाई के लिए कॉलम को स्वतः-आकार देगा, -1 कॉलम में सबसे लंबे आइटम को ऑटो करेगा। सभी MSDN के अनुसार । ध्यान दें कि -1 के मामले में, आपको आइटम जोड़ने के बाद कॉलम की चौड़ाई निर्धारित करनी होगी। इसलिए यदि आप एक नया आइटम जोड़ते हैं, तो आपको उस कॉलम (या कॉलम) की चौड़ाई संपत्ति निर्दिष्ट करने की आवश्यकता होगी जिसे आप ListView
नियंत्रण में डेटा के अनुसार ऑटो करना चाहते हैं ।
इसे इस्तेमाल करो:
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
से यहाँ
मैंने एक कार्यक्रम बनाया जिसने कई बार मेरी सूची को साफ़ और परिष्कृत किया। किसी कारण से जब भी मैंने चौड़ाई = -2 के साथ कॉलम जोड़े, मुझे पहले कॉलम के बहुत लंबे होने के कारण समस्या का सामना करना पड़ा। मैंने इसे ठीक करने के लिए यह विधि बनाई थी।
private void ResizeListViewColumns(ListView lv)
{
foreach(ColumnHeader column in lv.Columns)
{
column.Width = -2;
}
}
इस विधि के बारे में महान बात यह है कि आप अपने सभी स्तंभों का आकार बदलने के लिए इसे कहीं भी रख सकते हैं। बस अपने में पास हो जाओ ListView
।
यदि आपके पास किसी भी पैरेंट पैनल (ListView डॉक फिल) में ListView है, तो आप बस विधि का उपयोग कर सकते हैं ...
private void ListViewHeaderWidth() {
int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
foreach (ColumnHeader header in listViewInfo.Columns)
{
header.Width = HeaderWidth;
}
}
एक अन्य उपयोगी विधि है जिसे AutoResizeColumn
आप आवश्यक पैरामीटर के साथ एक विशिष्ट कॉलम को ऑटो आकार देने की अनुमति देते हैं।
आप इसे इस तरह कह सकते हैं:
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
फ्रेड्रिक के उत्तर पर थोड़ा विस्तार करते हुए, यदि आप उदाहरण के लिए फ्लाई पर कॉलम के ऑटो-आकार की चौड़ाई सेट करना चाहते हैं: पहले कॉलम के ऑटो-आकार की चौड़ाई को 70 पर सेट करना:
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
यह समाधान पहले कॉलम डेटा के आधार पर कॉलम का आकार बदल देगा, यदि आकार में चौड़ाई हेडर के आकार से छोटी है, तो यह हेडर को कम से कम फिट करने के लिए कॉलम का आकार बदल देगा। यह एक बहुत बदसूरत समाधान है, लेकिन यह काम करता है।
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 है। colFirstName एक कॉलम है, जहां शीर्षक को फिट करने के लिए 60 की चौड़ाई आवश्यक है। आदि।
आप इस तरह से कुछ का उपयोग कर सकते हैं, जिसे आप परम में चाहते हैं सूची दृश्य पास करके
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();
}
यह भी ध्यान देने योग्य है कि ListView पहले संपत्ति को बदले बिना अपेक्षित रूप में प्रदर्शित नहीं हो सकती है:
myListView.View = View.Details; // or View.List
मेरे लिए विजुअल स्टूडियो इसे किसी कारण से View.LargeIcon पर डिफ़ॉल्ट करने के लिए लगता है इसलिए कुछ भी नहीं दिखता है जब तक कि इसे बदल नहीं दिया जाता है।
एक दृश्य में एक कॉलम दिखाने के लिए पूरा कोड और एक ऊर्ध्वाधर स्क्रॉल बार के लिए जगह की अनुमति दें।
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);
}
मेरा मानना है कि लेखक आईडीई के माध्यम से एक समान विधि की तलाश कर रहा था जो कोड को उत्पन्न करेगा और यह सुनिश्चित करेगा कि सभी पैरामीटर जगह में थे, आदि एमएस से यह मिला:
विंडोज फॉर्म डिजाइनर पर इवेंट हैंडलर बनाना
VB बैकग्राउंड से खुद आ रहा है, यह वही है जो मैं देख रहा था, यहाँ क्लिक प्रतिकूल के लिए संक्षिप्त संस्करण है:
- उस प्रपत्र या नियंत्रण पर क्लिक करें जिसे आप एक इवेंट हैंडलर बनाना चाहते हैं।
- गुण विंडो में, ईवेंट बटन पर क्लिक करें
- उपलब्ध घटनाओं की सूची में, उस इवेंट पर क्लिक करें जिसे आप एक इवेंट हैंडलर बनाना चाहते हैं।
- ईवेंट नाम के दाईं ओर के बॉक्स में, हैंडलर का नाम टाइप करें और ENTER दबाएँ
myListView.Columns[0].Width = -1;