Βρείτε κόμβο κλικ στο μενού πλαίσιο

ψήφοι
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

Εδώ είναι η λύση μου. Βάλτε αυτή τη γραμμή NodeMouseClick περίπτωση TreeView σε:

 ((TreeView)sender).SelectedNode = e.Node;
Απαντήθηκε 09/12/2010 στις 00:05
πηγή χρήστη

ψήφοι
11

Θεωρώ ότι το πρότυπο τα παράθυρα treeview συμπεριφορά επιλογής συμπεριφορά να είναι αρκετά ενοχλητικό. Για παράδειγμα, αν χρησιμοποιείτε Explorer και κάντε δεξί κλικ σε έναν κόμβο και πατήστε Properties, αναδεικνύει τον κόμβο και δείχνει τις ιδιότητες διαλόγου για τον κόμβο κάνατε κλικ. Αλλά όταν επιστρέψετε από το παράθυρο διαλόγου, η τόνισε ο κόμβος ήταν ο κόμβος προηγουμένως επιλεγεί / υπογράμμισε πριν κάνατε το δεξί κλικ. Θεωρώ ότι αυτό προκαλεί προβλήματα ευχρηστίας, επειδή είμαι πάντα σύγχυση σχετικά με το εάν θα ενεργήσει σχετικά με το δικαίωμα κόμβο.

Έτσι, σε πολλές από τις GUIs μας, αλλάζουμε το επιλεγμένο κόμβο δέντρο σε ένα δεξί κλικ, έτσι ώστε δεν υπάρχει καμία σύγχυση. Αυτό μπορεί να μην είναι το ίδιο με ένα πρότυπο iwndos app όπως Explorer (και έχω την τάση να διαμορφώσει σε μεγάλο βαθμό τη συμπεριφορά GUI μας μετά από τυπικό παράθυρο εφαρμογές για 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

Παρόμοια με την απάντηση Marcus', αυτή ήταν η λύση που βρήκα λειτούργησε για μένα:

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