2012-02-09 16 views
18

मैं उन वस्तुओं की एक सूची बनाने की कोशिश कर रहा हूं, जिन्हें आप राइट-क्लिक करके और एक संदर्भ मेनू के साथ कई क्रियाएं कर सकते हैं। मैंने इसे पूरा कर लिया है, कोई समस्या नहीं है।किसी सूची बॉक्स में आइटम का चयन करने के लिए राइट क्लिक करें

लेकिन मैं इसे प्राप्त करना चाहता हूं ताकि जब आप आइटम पर राइट क्लिक करें, तो आइटम को चुनने के लिए, आइटम को चुनने के लिए चयनित आइटम को छोड़ने के बजाय।

मैंने इस और अन्य संबंधित प्रश्नों का शोध किया है, और मैंने इंडेक्स फ्रॉमपॉइंट (जिसे मैंने अपने शोध के माध्यम से पाया) का उपयोग करने की कोशिश की है, लेकिन जब भी मैं किसी आइटम पर राइट क्लिक करता हूं, तो यह हमेशा चयनित आइटम को साफ़ करता है और नहीं करता संदर्भ मेनू दिखाएं, क्योंकि मैंने इसे सेट किया है ताकि कोई चयनित आइटम न होने पर यह दिखाई न दे।

यहाँ कोड मैं वर्तमान में उपयोग कर रहा हूँ है:

ListBox.SelectedIndex = ListBox.IndexFromPoint(Cursor.Position.X, Cursor.Position.Y); 
+0

यह दिखता है System.Windows.Forms.ListBox में एक बग की तरह, हमें इसे माइक्रोसॉफ्ट को रिपोर्ट करनी चाहिए। –

उत्तर

31

हैंडल ListBox.MouseDown और वहाँ में आइटम का चयन करें। इस तरह:

private void listBox1_MouseDown(object sender, MouseEventArgs e) 
{ 
    listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y); 
} 
+4

संदर्भ मेनू पहले से ही लिस्टबॉक्स घिरा है, तो बस का उपयोग करें: निजी शून्य listBoxItems_MouseDown (वस्तु प्रेषक, MouseEventArgs ई) { listBoxItems.SelectedIndex = listBoxItems.IndexFromPoint (e.X, e.Y); } –

5

इस एक काम कर रहा है ...

this.ListBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.List_RightClick); 

private void List_RightClick(object sender, MouseEventArgs e) 
{ 

    if (e.Button == MouseButtons.Right) 
    { 
     int index = this.listBox.IndexFromPoint(e.Location); 
     if (index != ListBox.NoMatches) 
     { 
      listBox.Items[index]; 
     } 
    } 

} 
+0

बस इस लाइन सूची को बदल दिया बॉक्स.इटम [इंडेक्स]; के साथ। चयनित Index = सूचकांक; और यह पूरी तरह से काम करता है। –

+0

अजीब है कि क्लिक ईवेंट सही बटन या मध्य बटन पर कब्जा नहीं लग रहा है। उन्हें पकड़ने के लिए माउसअप का उपयोग करना होगा .. – MattClimbs

0

भी तो पूरी लिस्टबॉक्स पर एक MouseRightButtonUp घटना की स्थापना करके समान व्यवहार प्राप्त कर सकते हैं:

private void AccountItemsT33_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    // If have selected an item via left click, then do a right click, need to disable that initial selection 
    AccountItemsT33.SelectedIndex = -1; 
    VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), (sender as ListBox)).OfType<ListBoxItem>().First().IsSelected = true; 
}