2011-07-20 14 views
7

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

उत्तर

17

डेटाग्रिड व्यू MouseDown ईवेंट का उपयोग यह जांचने के लिए करें कि सही माउस क्लिक किया गया है और यदि ऐसा है कि कोई सेल, पंक्ति या कॉलम क्लिक किया गया है, तो यह निर्धारित करने के लिए संबंधित HitTestInfo प्रॉपर्टी का उपयोग करें। आपको जिस संदर्भ की आवश्यकता है ContextMenuStrip प्रदर्शित करने के लिए इस जानकारी का उपयोग करें।

यहां एक उदाहरण MouseDown ईवेंट है जो ऐसा करता है। नमूना को एक फॉर्म पर डेटाग्रिड व्यू और तीन कंटेंटमेनूस्ट्रिप्स ड्रॉप करने का प्रयास करने के लिए। ContentMenuStrips mnuCell, mnuRow और mnuColumn नाम दें।

Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown 
    If e.Button = Windows.Forms.MouseButtons.Right Then 
     Dim ht As DataGridView.HitTestInfo 
     ht = Me.DataGridView1.HitTest(e.X, e.Y) 
     If ht.Type = DataGridViewHitTestType.Cell Then 
      DataGridView1.ContextMenuStrip = mnuCell 
      mnuCell.Items(0).Text = String.Format("This is the cell at {0}, {1}", ht.ColumnIndex, ht.RowIndex) 
     ElseIf ht.Type = DataGridViewHitTestType.RowHeader Then 
      DataGridView1.ContextMenuStrip = mnuRow 
      mnuRow.Items(0).Text = "This is row " + ht.RowIndex.ToString() 
     ElseIf ht.Type = DataGridViewHitTestType.ColumnHeader Then 
      DataGridView1.ContextMenuStrip = mnuColumn 
      mnuColumn.Items(0).Text = "This is col " + ht.ColumnIndex.ToString() 
     End If 
    End If 
End Sub 

यहाँ मैं आइटम के लिए ContextMenuStrip उचित करने के लिए DataGridView के ContextMenuStrip संपत्ति बताए कर रहा हूँ सही क्लिक किया (सेल, पंक्ति या स्तंभ)। यह दिखाने के लिए कि आप ContextMenuStrips के व्यवहार को और कैसे अनुकूलित कर सकते हैं, मैं प्रत्येक ContentMenuStrips 'मेनू आइटम में टेक्स्ट भी सेट कर रहा हूं।

+0

धन्यवाद, मेरे पास तीन संदर्भमेन हैं, एक पंक्ति, कॉलम और सेल के लिए। मैंने इस पंक्ति में पंक्ति संदर्भमेनू रखा है, "यह पंक्ति है" ', और अन्य दो को अक्षम करें, यह अभी भी एक को दिखाता है, लेकिन जब मैं सेल पर क्लिक करता हूं तो यह पंक्ति संदर्भ मेनू दिखाता है। – Smith

+0

@ स्मिथ मैंने अपने उदाहरण को अपडेट किया जो मुझे लगता है कि आपको चाहिए। –

1

डेटाग्रिड व्यू के माउसडाउन ईवेंट पर, DataGridView.HitTest विधि का उपयोग करें और जांचें कि क्या क्लिक किया गया है। फिर आप क्लिक किए गए संदर्भ के आधार पर संदर्भ मेनू स्विच कर सकते हैं।

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