2010-03-04 22 views
8

में क्लिक स्तंभ निर्धारित मैं स्तंभ सी #ListView

में एक ListView में क्लिक मैं How to determine the clicked column index in a Listview से कुछ नमूना कोड है, लेकिन मुझे यकीन है कि मैं इसे कैसे लागू करना चाहिए नहीं कर रहा हूँ प्राप्त करने की आवश्यकता।

उत्तर

4

ListView नियंत्रण में HitTest विधि है। आप इसे माउस क्लिक इवेंट के एक्स- और वाई-निर्देशांक देते हैं, और यह आपको एक ऑब्जेक्ट देता है जो आपको उस बिंदु पर पंक्ति (सूची दृश्य आइटम) और कॉलम (सूची दृश्य उप-समूह) बताता है।

+0

हाय टिम ... जवाब देने के लिए धन्यवाद ... तुम मुझे कोड प्रदान करें सकते हैं – Sathish

+0

सतीश - यह कोड की एक पंक्ति है; इसमें सूची देखने के लिए एक कॉल है। हिटटेस्ट; आपको माउस क्लिक के एक्स और वाई निर्देशांक प्रदान करने की आवश्यकता होगी। –

+0

कोड की एक पंक्ति लिखना मुश्किल नहीं होना चाहिए, esp। टिम प्रदान की युक्तियों के साथ। – IAbstract

0

यह वीबीएनईटी कोड है, लेकिन वस्तुओं को वही होना चाहिए।

Private LVUsersLastHit As Point 
    Private Sub lvUsers_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lvUsers.MouseUp 
     Me.LVUsersLastHit = e.Location 
    End Sub 
    Private Sub LvUsers_Doubleclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvUsers.DoubleClick 
     Dim HTI As ListViewHitTestInfo = Me.lvUsers.HitTest(Me.LVUsersLastHit) 
     If HTI.Item Is Nothing OrElse HTI.SubItem Is Nothing Then Exit Sub 'nothing was dblclicked 
     MsgBox("doubleClicked the " & HTI.Item.ToString & " Item on the " & HTI.SubItem.ToString & " sub Item") 
    End Sub 
+1

यदि आप कॉलम (सिंगल) क्लिक करना चाहते हैं तो कॉलमक्लिक इवेंट का उपयोग करें। उपर्युक्त कोड से मैं कल्पना कर सकता हूं कि आप सबटाइम सरणी आइटम से सबटाइम प्राप्त कर सकते हैं, फिर सूचीदृश्य के कॉलम से संबंधित इंडेक्स किए गए आइटम को कॉलमहेडर ऑब्जेक्ट को पुनर्प्राप्त करने के लिए प्राप्त करें जो कि dblclicked था (रन टाइम पर कॉलम री-ऑर्डरिंग के बावजूद) – Anthony

15

जीज़, हर कोई कोड पोस्ट करने के लिए बहुत आलसी है। प्रक्रिया के लिए तीन कदम हैं:

  1. Control.MousePosition का उपयोग करके माउस स्थिति प्राप्त करें और ग्राहक निर्देशांक में कनवर्ट करें।
  2. माउस को इंगित करने के लिए HitTest फ़ंक्शन पर कॉल करें। यह वास्तविक कॉलम संख्या को छोड़कर बहुत सारी जानकारी के साथ एक ऑब्जेक्ट देता है ...
  3. कॉलम नंबर खोजने के लिए IndexOf का उपयोग करके सबिटैम्स सरणी खोजें।

कोड यह रहा:

private void listViewMasterVolt_DoubleClick(object sender, EventArgs e) 
{ 
    Point mousePosition = myListView.PointToClient(Control.MousePosition); 
    ListViewHitTestInfo hit = myListView.HitTest(mousePosition); 
    int columnindex = hit.Item.SubItems.IndexOf(hit.SubItem); 
} 
+0

यदि आप इसे काम करने के लिए नहीं प्राप्त कर सकते हैं तो 'माउसडाउन' ईवेंट में 'ई। स्थान' का उपयोग करके दो अंतिम पंक्तियों को कोड करें! – TaW

+0

यदि आपके पास पहले कॉलम में एक चेकबॉक्स है ('ListView.CheckBoxes = true',' FullRowSelect = true') तो आप 'if (mousePosition.X> = 20) {... टॉगल चेकबॉक्स का उपयोग करना चाहेंगे ...} ' – Roland

0

e.Column वास्तव में सूचकांक रखती

private void lv_ColumnClick(object sender, ColumnClickEventArgs e) 
    {    
     Int32 colIndex = Convert.ToInt32(e.Column.ToString()); 
     lv.Columns[colIndex].Text = "new text"; 

    } 
+1

'कॉलमक्लिक' कॉलम __headers__ पर क्लिक करने के लिए केवल मान्य है – TaW