सी # लिस्ट व्यू कॉलम चौड़ाई ऑटो


82

मैं listviewस्वत: नियंत्रण के लिए एसी # winforms के कॉलम की चौड़ाई कैसे निर्धारित कर सकता हूं । चौड़ाई जैसा कुछ = -1 / -2?

जवाबों:


106

आपने उत्तर दिया: -2 कॉलम हेडर में टेक्स्ट की लंबाई के लिए कॉलम को स्वतः-आकार देगा, -1 कॉलम में सबसे लंबे आइटम को ऑटो करेगा। सभी MSDN के अनुसार । ध्यान दें कि -1 के मामले में, आपको आइटम जोड़ने के बाद कॉलम की चौड़ाई निर्धारित करनी होगी। इसलिए यदि आप एक नया आइटम जोड़ते हैं, तो आपको उस कॉलम (या कॉलम) की चौड़ाई संपत्ति निर्दिष्ट करने की आवश्यकता होगी जिसे आप ListViewनियंत्रण में डेटा के अनुसार ऑटो करना चाहते हैं ।


ध्यान दें कि जबकि MSDN आलेख ColumnHeader का संदर्भ देता है, इसका अर्थ केवल कॉलम है। कोड उदाहरण:myListView.Columns[0].Width = -1;
एरिक जी

103

इसे इस्तेमाल करो:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

से यहाँ


8
लेकिन क्या होगा अगर आप हेडर या डेटा की अधिकतम चौड़ाई चाहते हैं? कोई झिलमिलाहट के साथ?
टॉडडामो

@toddmo दोनों तारों का उपयोग करें। और, अगर neccesary, listView.BeginUpdate () के बीच; ... listView.EndUpdate ();
अर्टेम एक्स।

23

मैंने एक कार्यक्रम बनाया जिसने कई बार मेरी सूची को साफ़ और परिष्कृत किया। किसी कारण से जब भी मैंने चौड़ाई = -2 के साथ कॉलम जोड़े, मुझे पहले कॉलम के बहुत लंबे होने के कारण समस्या का सामना करना पड़ा। मैंने इसे ठीक करने के लिए यह विधि बनाई थी।

private void ResizeListViewColumns(ListView lv)
{
    foreach(ColumnHeader column in lv.Columns)
    {
        column.Width = -2;
    }
}

इस विधि के बारे में महान बात यह है कि आप अपने सभी स्तंभों का आकार बदलने के लिए इसे कहीं भी रख सकते हैं। बस अपने में पास हो जाओ ListView


1
यह आपके ListView में अंतिम आइटम की चौड़ाई की चौड़ाई निर्धारित करेगा
Qsiris

मैं आपके कोड का उपयोग करता हूं, लेकिन यदि मेरे पास मेरी सूची में केवल एक कॉलम है, तो हर बार मुझे एक क्षैतिज स्क्रॉलबार मिलता है। यदि कम से कम दो कॉलम हैं तो कोड अच्छी तरह से काम करता है। क्या आप जानते हैं कि यह व्यवहार कहाँ से आता है?
प्रोटोटाइप

2

यदि आपके पास किसी भी पैरेंट पैनल (ListView डॉक फिल) में ListView है, तो आप बस विधि का उपयोग कर सकते हैं ...

private void ListViewHeaderWidth() {
        int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
        foreach (ColumnHeader header in listViewInfo.Columns)
        {
            header.Width = HeaderWidth;
        }
    }

2

एक अन्य उपयोगी विधि है जिसे AutoResizeColumnआप आवश्यक पैरामीटर के साथ एक विशिष्ट कॉलम को ऑटो आकार देने की अनुमति देते हैं।

आप इसे इस तरह कह सकते हैं:

listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);

1

फ्रेड्रिक के उत्तर पर थोड़ा विस्तार करते हुए, यदि आप उदाहरण के लिए फ्लाई पर कॉलम के ऑटो-आकार की चौड़ाई सेट करना चाहते हैं: पहले कॉलम के ऑटो-आकार की चौड़ाई को 70 पर सेट करना:

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);

1

यह समाधान पहले कॉलम डेटा के आधार पर कॉलम का आकार बदल देगा, यदि आकार में चौड़ाई हेडर के आकार से छोटी है, तो यह हेडर को कम से कम फिट करने के लिए कॉलम का आकार बदल देगा। यह एक बहुत बदसूरत समाधान है, लेकिन यह काम करता है।

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 की चौड़ाई आवश्यक है। आदि।


0

आप इस तरह से कुछ का उपयोग कर सकते हैं, जिसे आप परम में चाहते हैं सूची दृश्य पास करके

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

0

यह भी ध्यान देने योग्य है कि 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);
}

-1

मेरा मानना ​​है कि लेखक आईडीई के माध्यम से एक समान विधि की तलाश कर रहा था जो कोड को उत्पन्न करेगा और यह सुनिश्चित करेगा कि सभी पैरामीटर जगह में थे, आदि एमएस से यह मिला:

विंडोज फॉर्म डिजाइनर पर इवेंट हैंडलर बनाना

VB बैकग्राउंड से खुद आ रहा है, यह वही है जो मैं देख रहा था, यहाँ क्लिक प्रतिकूल के लिए संक्षिप्त संस्करण है:

  1. उस प्रपत्र या नियंत्रण पर क्लिक करें जिसे आप एक इवेंट हैंडलर बनाना चाहते हैं।
  2. गुण विंडो में, ईवेंट बटन पर क्लिक करें
  3. उपलब्ध घटनाओं की सूची में, उस इवेंट पर क्लिक करें जिसे आप एक इवेंट हैंडलर बनाना चाहते हैं।
  4. ईवेंट नाम के दाईं ओर के बॉक्स में, हैंडलर का नाम टाइप करें और ENTER दबाएँ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.