bağlam menüsü altında tıklandığında düğümü bul

oy
61

bağlam menüsü bir ağaç listesinde hangi düğümün etkinleştirilmiş nasıl öğrenebilirim? Mesela bir düğüm sağ tıklayıp menüden bir seçenek seçerek.

Ben treeviews' kullanamaz SelectedNodedüğüm sadece sağ tıklanan ve seçilmemiş olmuştur çünkü özelliği.

Oluştur 05/08/2008 saat 17:21
kaynak kullanıcı
Diğer dillerde...                            


9 cevaplar

oy
83

Daha sonra GetNodeAt MouseEventArgs tarafından sağlanan fare koordinatları verilen kullanarak doğru düğümü seçmek, TreeView için bir fare tıklaması bir etkinlik ekleyebilirsiniz.

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);
        }
    }
}
Cevap 05/08/2008 saat 17:36
kaynak kullanıcı

oy
19

İşte benim çözümdür. TreeView NodeMouseClick olayı içine bu satırı koyun:

 ((TreeView)sender).SelectedNode = e.Node;
Cevap 09/12/2010 saat 00:05
kaynak kullanıcı

oy
11

Ben standart pencereler ağaç davranış seçim davranışı oldukça can sıkıcı buluyorum. Örneğin, Özellikler 'bir düğüme Explorer ve sağ tıklayarak kullanarak vurmak eğer, bu düğümü vurgular ve tıkladığınız düğüm için iletişim özelliklerini gösterir. Eğer iletişim kutusundan döndüğünüzde Ama, vurgulanan düğüm daha önce / seçilmiş sağ tıklama yapmadan önce vurgulanan düğüm oldu. Seni sonsuza dek Birazdan düğümde hareket olmadığına karıştı ediliyorum çünkü bu kullanılabilirlik sorunlarına neden bulabilirsiniz.

Herhangi bir karışıklık olmaması Öyle ki bizim GUI'leri çoğunda, bir sağ tıklama ile seçilen ağaç düğümü değiştirin. Bu Explorer gibi standart bir iwndos uygulamayla aynı olmayabilir (ve şiddetle usabiltiy nedenlerle standart pencere uygulamalar sonrasında bizim GUI davranışlarını modellemek eğilimi), bu bir istisna durum çok daha kullanışlı ağaçlara sonuçları inanıyoruz.

İşte doğru tıklama sırasında seçimini değiştiren bazı kodudur:

  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 );
           }
        }
     }
  }
Cevap 11/12/2008 saat 22:10
kaynak kullanıcı

oy
6

Bu çok daha iyi bir çözüm gibi bulmaları nedeniyle bu soruyu yeniden canlandırılması. Kullandığım NodeMouseClickyerine olay.

void treeview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if( e.Button == MouseButtons.Right )
    {
        tree.SelectedNode = e.Node;
    }
}
Cevap 02/01/2013 saat 20:41
kaynak kullanıcı

oy
2

Bu çok eski bir sorudur, ancak yine de yararlı buldum. Birazdan tıklanan düğüm selectedNode olmak istemiyorum çünkü yukarıda bazı yanıtlar bir arada kullanıyorum. Ben kök düğüm seçilmiş olması ve bunun birini silmek isterseniz var çocuklar, bilmiyorum istiyorum bunu sildiğinizde seçilen çocuk (Ben de bir sağ üstünde olmasını istemiyoruz selectedNode üzerinde bazı işler yapıyorum ) tıklayın. İşte benim katkıdır:

// 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);
}
Cevap 06/12/2016 saat 19:42
kaynak kullanıcı

oy
2

Marcus'un cevap benzer şekilde, bu benim için çalıştı bulundu çözüm oldu:

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

Bunu gibi her düğüme bunu ayarlarsanız bağlam menü kendini göstermeye gerek yoktur:

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

Sonra contextMenu Açılış olay içinde, TreeView.SelectedNode mülkiyet doğru düğümü yansıtacaktır.

Cevap 21/11/2012 saat 23:10
kaynak kullanıcı

oy
0

Eğer birlikte çalıştırabilir Başka bir seçenek, seçilen düğüm olan bir küresel değişkeni sahip olmaktır. Sadece kullanmak gerekir TreeNodeMouseClickEventArgs.

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

Şimdi bu düğüme erişebilir ve özelliklerini bu.

Cevap 12/12/2016 saat 20:30
kaynak kullanıcı

oy
0

Ben bunu nasıl burasıdır.

private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
        e.Node.TreeView.SelectedNode = e.Node;
}
Cevap 29/05/2014 saat 23:11
kaynak kullanıcı

oy
0

Eğer içerik menüsü seçili öğeye bağımlı olmak istiyorsanız bence en iyi hamle tıklanan öğeyi seçmek için Jonesinator kodunu kullanmaktır konum. Sizin içerik menüsü içeriği seçili öğeye bağlı olabilir.

Sadece içerik menüsü için kullanmaya karşı ilk olarak öğeyi seçme birkaç avantaj sağlamaktadır. İlk kullanıcı menüsü ile ilişkili öğe böylece görsel bir o tıklandığında hangi olarak gösterge ve sahip olmasıdır. İkinci Bu yolu bağlam menüsünü (örn klavye kısayolları) çağırma diğer yöntemler ile uyumlu tutmak için çok daha kolay bir cehennem olmasıdır.

Cevap 08/08/2008 saat 15:04
kaynak kullanıcı

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