2009-12-11 20 views
11

एक सूची दृश्य में आप प्रत्येक आइटम पर आइकन रख सकते हैं।
विवरण-मोड में देखते समय, आइकन बाएं-अधिकांश कॉलम में दिखाया गया है।मैं ListViewSubItem के लिए आइकन कैसे सेट कर सकता हूं?

क्या मैं किसी अन्य कॉलम में एक आइकन दिखा सकता हूं?

उत्तर

10

ListView नियंत्रण उप-वस्तुओं में छवियों का समर्थन नहीं करता है। करने के लिए सबसे आसान बात DataGridView पर स्विच करें और DataGridViewImageColumn का उपयोग करें। यदि यह संभव नहीं है, तो आपको ListView नियंत्रण में कस्टम ड्रा समर्थन का उपयोग करके आइकन स्वयं को आकर्षित करने की आवश्यकता होगी। यह सेट करने के लिए ListView.OwnerDraw = true और ListView.DrawSubItem और ListView.DrawColumnHeader ईवेंट को संभाल लें।

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) 
{ 
    // Only interested in 2nd column. 
    if (e.Header != this.columnHeader2) 
    { 
     e.DrawDefault = true; 
     return; 
    } 

    e.DrawBackground(); 
    var imageRect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height); 
    e.Graphics.DrawImage(SystemIcons.Information.ToBitmap(), imageRect); 
} 

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) 
{ 
    e.DrawDefault = true; 
} 
+0

क्यों न केवल 'var imageRect = e.Bounds;' यह एक मान प्रकार है, इसलिए मानों की प्रतिलिपि बनाई जा रही है और संदर्भित नहीं किया गया है ताकि उन्हें संभालने में सुरक्षित बनाया जा सके। – ja72

+0

वास्तविक दुनिया के उपयोग में प्रदर्शनी, आप subitem में निहित संरेखण, पैडिंग और/या अतिरिक्त सामग्री के लिए खाते में छवि को समायोजित करना चाहते हैं। –

2
ListView से और अपने स्वयं के आइकन आकर्षित इनहेरिट

public class MyListView : ListView 
{ 
    protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e) 
    { 
     base.OnDrawSubItem(e); 
    } 
} 
6

उपयोग पी/आह्वान और सूचीदृश्य को LVM_SETITEM संदेश भेजने (आप नियंत्रण निर्माण पर या LVM_SETEXTENDEDLISTVIEWSTYLE के माध्यम से LVS_EX_SUBITEMIMAGES शैली स्थापित करना चाहिए), सबआइटम सूचकांक और इसी छवि सूचकांक निर्दिष्ट करें। आपको डालने वाली प्रत्येक सूची आइटम के लिए आपको इसे करने की आवश्यकता होगी।

5

ObjectListView एक .NET Winforms ListView के आस-पास एक ओपन सोर्स रैपर है। यह p/invoke रणनीति का उपयोग करते हुए सबिटैम्स पर छवियों का समर्थन करता है कि @ ligget78 का उल्लेख किया गया है। यह ListView के साथ कई अन्य सामान्य समस्याओं को हल करता है।

यह आप एक न्यूनतम प्रयास के साथ बहुत अच्छी लग रही listviews बनाने के लिए अनुमति देता है:

alt text http://objectlistview.sourceforge.net/cs/_images/fancy-screenshot2.png

0

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

listView1.Columns[0].DisplayIndex = 1; 
निश्चित रूप से

यह केवल यदि आप केवल एक कॉलम में मौजूद आइकन की जरूरत है काम करता है।

संबंधित मुद्दे