नोड का पता लगाएं प्रसंग मेनू के अंतर्गत क्लिक किया

वोट
61

मैं कैसे एक पेड़ सूची में जो नोड संदर्भ मेनू सक्रिय हो गया है पता कर सकते हैं? उदाहरण के लिए एक नोड राइट-क्लिक करके और मेनू से एक विकल्प का चयन।

मैं TreeViews 'उपयोग नहीं कर सकते SelectedNodeसंपत्ति क्योंकि नोड केवल सही क्लिक और नहीं चयनित किया गया है।

05/08/2008 को 17:21
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


9 जवाब

वोट
83

आप TreeView करने के लिए एक माउस क्लिक घटना में जोड़ सकते हैं, तो का उपयोग कर GetNodeAt माउस निर्देशांक MouseEventArgs द्वारा प्रदान की दी सही नोड का चयन करें।

void treeView1MouseUp(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Right)
    {
        // Select the clicked node
        treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

        if(treeView1.SelectedNode != null)
        {
            myContextMenuStrip.Show(treeView1, e.Location);
        }
    }
}
05/08/2008 को 17:36
का स्रोत उपयोगकर्ता

वोट
19

यहाँ मेरी समाधान है। TreeView का NodeMouseClick घटना में इस लाइन रखो:

 ((TreeView)sender).SelectedNode = e.Node;
09/12/2010 को 00:05
का स्रोत उपयोगकर्ता

वोट
11

मैं मानक खिड़कियों treeview व्यवहार चयन व्यवहार काफी कष्टप्रद हो पाते हैं। उदाहरण के लिए, यदि आप एक नोड पर एक्सप्लोरर और राइट क्लिक उपयोग कर रहे हैं और हिट गुण, यह नोड पर प्रकाश डाला गया और गुण नोड आप को क्लिक करने पर संवाद को दर्शाता है। लेकिन जब आप संवाद से लौटने के लिए, पर प्रकाश डाला नोड नोड पहले से चयनित / प्रकाश डाला से पहले आप राइट क्लिक किया था। मैं इस प्रयोज्य समस्याओं का कारण बनता रहा हूँ क्योंकि मैं हमेशा के लिए है कि क्या मैं सही नोड पर काम किया पर भ्रमित किया जा रहा हैं।

इसलिए हमारे GUIs के कई में, हम एक राइट क्लिक पर चयनित पेड़ नोड को बदलते हैं ताकि कोई भ्रम है। यह एक्सप्लोरर की तरह एक मानक iwndos ऐप जैसा नहीं हो सकता है (और मैं दृढ़ता से usabiltiy कारणों के लिए मानक खिड़की क्षुधा के बाद हमारे जीयूआई व्यवहार मॉडल के लिए करते हैं), मुझे विश्वास है कि यह एक अपवाद के मामले में अब तक में जो परिणाम अधिक उपयोगी पेड़।

यहाँ कुछ कोड है कि राइट क्लिक दौरान चयन बदल जाता है:

  private void tree_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
  {
     // only need to change selected note during right-click - otherwise tree does
     // fine by itself
     if ( e.Button == MouseButtons.Right )
     {         
        Point pt = new Point( e.X, e.Y );
        tree.PointToClient( pt );

        TreeNode Node = tree.GetNodeAt( pt );
        if ( Node != null )
        {
           if ( Node.Bounds.Contains( pt ) )
           {
              tree.SelectedNode = Node;
              ResetContextMenu();
              contextMenuTree.Show( tree, pt );
           }
        }
     }
  }
11/12/2008 को 22:10
का स्रोत उपयोगकर्ता

वोट
6

इस सवाल को पुनर्जीवित क्योंकि मैं इस एक बेहतर समाधान हो पाते हैं। मैं का उपयोग NodeMouseClickघटना के बजाय।

void treeview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if( e.Button == MouseButtons.Right )
    {
        tree.SelectedNode = e.Node;
    }
}
02/01/2013 को 20:41
का स्रोत उपयोगकर्ता

वोट
2

यह एक बहुत ही पुराने सवाल है, लेकिन मैं अभी भी इसे उपयोगी पाया। मैं ऊपर कुछ उत्तर का एक संयोजन का उपयोग कर रहा है, क्योंकि मैं दायाँ क्लिक किया है नोड selectedNode बनने के लिए नहीं करना चाहती। अगर मैं रूट नोड चयनित है और यह में से एक को नष्ट करना चाहते है बच्चों, मैं नहीं चाहता हूँ बच्चे जब मैं इसे हटा चयनित (मैं भी selectedNode पर कुछ काम है कि मैं एक दाएं पर हो नहीं करना चाहती कर रहा हूँ क्लिक करें)। यहाँ मेरी योगदान है:

// Global Private Variable to hold right-clicked Node
private TreeNode _currentNode = new TreeNode();

// Set Global Variable to the Node that was right-clicked
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
        _currentNode = e.Node;
}

// Do something when the Menu Item is clicked using the _currentNode
private void toolStripMenuItem_Clicked(object sender, EventArgs e)
{
    if (_currentNode != null)
        MessageBox.Show(_currentNode.Text);
}
06/12/2016 को 19:42
का स्रोत उपयोगकर्ता

वोट
2

मार्कस 'जवाब के सामान, इसका समाधान मैं मेरे लिए काम किया पाया गया था:

private void treeView_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        treeView.SelectedNode = treeView.GetNodeAt(e.Location);
    }
}

आप संदर्भ मेनू अपने आप को नहीं दिखा जरूरत तुम इतनी तरह प्रत्येक व्यक्ति के नोड के लिए सेट करता है, तो:

TreeNode node = new TreeNode();
node.ContextMenuStrip = contextMenu;

तब ContextMenu के उद्घाटन घटना के अंदर, TreeView.SelectedNode संपत्ति सही नोड को प्रतिबिंबित करेगा।

21/11/2012 को 23:10
का स्रोत उपयोगकर्ता

वोट
0

एक अन्य विकल्प आप के साथ चला सकते हैं एक वैश्विक चर चयनित नोड है कि है। तुम बस का उपयोग करने की आवश्यकता होगी TreeNodeMouseClickEventArgs

public void treeNode_Click(object sender, TreeNodeMouseClickEventArgs e)
{
    _globalVariable = e.Node;
}

अब आप उस नोड के लिए उपयोग किया है और यह गुण है।

12/12/2016 को 20:30
का स्रोत उपयोगकर्ता

वोट
0

यहाँ कैसे मैं यह कर रहा है।

private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
        e.Node.TreeView.SelectedNode = e.Node;
}
29/05/2014 को 23:11
का स्रोत उपयोगकर्ता

वोट
0

आप संदर्भ मेनू चयनित आइटम पर निर्भर होना चाहते हैं तो आप कर रहे हैं सबसे अच्छा कदम मुझे लगता है कि क्लिक किए गए आइटम का चयन करने Jonesinator के कोड का प्रयोग है। आपका संदर्भ मेनू सामग्री तो चयनित आइटम पर निर्भर हो सकता है।

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

08/08/2008 को 15:04
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more