Keresse csomópont kattintott alatt helyi menü

szavazat
61

Hogyan lehet megtudni, hogy melyik csomópont egy fa listát a helyi menüben aktiválva lett? Például jobb gombbal a csomópont és kiválaszt egy opciót a menüből.

Nem tudom használni a TreeViews' SelectedNodetulajdonság, mert a csomópont csak volt jobb gombbal kattintva a nem választott.

A kérdést 05/08/2008 17:21
a forrás felhasználó
Más nyelveken...                            


9 válasz

szavazat
83

Felvehet egy kattintással eseményt a TreeView, majd válassza ki a megfelelő csomópontot GetNodeAt adott az egér koordináták által biztosított 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);
        }
    }
}
Válaszolt 05/08/2008 17:36
a forrás felhasználó

szavazat
19

Itt van a megoldás. Tedd ezt sort NodeMouseClick esetén a TreeView:

 ((TreeView)sender).SelectedNode = e.Node;
Válaszolt 09/12/2010 00:05
a forrás felhasználó

szavazat
11

Én meg a szokásos windows treeview viselkedés kiválasztási viselkedést, hogy elég bosszantó. Például, ha használ Explorer, és jobb klikk egy csomópontra és a hit tulajdonságai, kiemeli a csomópontot, és megmutatja a párbeszédablakának a csomópont rákattintott. De ha az ember visszatér a párbeszéd, a kiemelt csomópont volt a csomópont előzőleg kiválasztott / kijelölt előtted a jobb egérgombbal. Szerintem ez okozza a használhatóság problémákat, mert én örökre összetéveszthető-e tettem a jobb csomópontot.

Tehát sok a GUI, megváltoztatjuk a kiválasztott csomópontja egy jobb klikk, így nincs zavar. Ez nem lehet ugyanaz, mint a standard iwndos app, mint Explorer (és én inkább erősen modellezni a GUI viselkedés után szabványos ablak apps usabiltiy okokból), úgy vélem, hogy ez az egyetlen kivétel az esetben azt eredményezi, sokkal jobban használható, fák.

Itt van néhány kód, amely megváltoztatja a kiválasztás során a jobb klikk:

  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 );
           }
        }
     }
  }
Válaszolt 11/12/2008 22:10
a forrás felhasználó

szavazat
6

Élénkítő ezt a kérdést, mert én meg, hogy ez sokkal jobb megoldás. Én a NodeMouseClickrendezvény helyett.

void treeview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if( e.Button == MouseButtons.Right )
    {
        tree.SelectedNode = e.Node;
    }
}
Válaszolt 02/01/2013 20:41
a forrás felhasználó

szavazat
2

Ez egy nagyon régi kérdés, de még mindig hasznosnak találták. Én egy kombinációja néhány választ a fenti, mert nem akarjuk, hogy a jobb egérgombbal rákattintva csomópont lesz a selectedNode. Ha van a gyökér kiválasztott és törlöm ez az egyik gyerek, én nem akarom, hogy a gyermek választott, amikor törölni (én is csinálok egy kis munkára a selectedNode, hogy nem akarja, hogy megtörténjen a jobb- kattintás). Itt van a hozzájárulás:

// 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);
}
Válaszolt 06/12/2016 19:42
a forrás felhasználó

szavazat
2

Hasonló a Marcus válasza ez volt a megoldás találtam nekem dolgozott:

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

Nem kell mutatni a helyi menü magad, ha meg azt, hogy minden egyes csomóponthoz így:

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

Azután az ContextMenu megindításáról esemény, a TreeView.SelectedNode ingatlan tükrözni fogja a helyes csomóponton.

Válaszolt 21/11/2012 23:10
a forrás felhasználó

szavazat
0

Egy másik lehetőség lehetne futtatni, hogy egy globális változót, amely a kiválasztott csomópont. Akkor csak meg kell használni a TreeNodeMouseClickEventArgs.

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

Most lehetőséged van, hogy a csomópont és a tulajdonságait.

Válaszolt 12/12/2016 20:30
a forrás felhasználó

szavazat
0

Itt van, hogyan csinálom.

private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
        e.Node.TreeView.SelectedNode = e.Node;
}
Válaszolt 29/05/2014 23:11
a forrás felhasználó

szavazat
0

Ha szeretné, hogy a helyi menü, hogy függ a kiválasztott elem te legjobb lépés szerintem használni Jonesinator kódját válassza a kattintással elemet. A helyi menü tartalmát ezután függ a kiválasztott elem.

Az elem először csak arra használjuk, hogy a helyi menüt ad néhány előnye. Az első az, hogy a felhasználó egy vizuális jelzése, hogy rákattintott, és így melyik elem a menü társul. A második az, hogy ez így is pokoli sokkal könnyebb tartani összeegyeztethető más módszerekkel való hivatkozás a helyi menüből (pl gyorsbillentyűk).

Válaszolt 08/08/2008 15:04
a forrás felhasználó

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