2016-08-05 17 views
0

Ich versuche, das angeklickte Element in einem Kontextmenü zu erhalten. Ich lese den folgenden Code von dem, was ich im Internet finde, aber ich bin ein wenig verwirrt mit ToolStripMenu, ContextMenu und MenuItem. Von dem, was ich finden kann, scheint dies der richtige Weg zu sein, den ausgewählten Menüpunkt zu bekommen, aber es scheint nicht für mich zu funktionieren.Kann kein ToolStripItem zu MenuItem

Ich erstelle ein Kontextmenü, wenn ich mit der rechten Maustaste auf eine Zeile DataGrid klicke.

In dem angeklickten Ereignis binde ich den Absender auf eine MenuItem. Im Debugger sieht der Absender mit den beiden Items gut aus, aber var mi = sender as MenuItem gibt nur null zurück. Was mache ich bitte falsch?

ContextMenuStrip my_menu = new ContextMenuStrip(); 

int position_xy_mouse_row = dataGridView1.HitTest(e.X, e.Y).RowIndex; 
if (position_xy_mouse_row >= 0 
{ 
    DataGridViewRow selectedRow = dataGridView1.Rows[position_xy_mouse_row]; 
    dataGridView1.CurrentCell = dataGridView1.Rows[position_xy_mouse_row].Cells[0]; 

    my_menu.Items.Add(new ToolStripMenuItem 
    { 
     Name = "Delete", 
     Text = "Delete", 
     Tag = "Delete" 
    }); 
    my_menu.Items.Add(new ToolStripMenuItem 
    { 
     Name = "Update", 
     Text = "Update", 
     Tag = "Update" 
    }); 

    my_menu.Show(dataGridView1, new Point(e.X, e.Y)); 
    my_menu.ItemClicked += new ToolStripItemClickedEventHandler(my_menu_ItemClicked); 
} 


private void my_menu_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
{ 
    var mi = sender as MenuItem; 
    string menuText = mi.Text; 
} 

Antwort

0

Die sender in diesem Fall ist die ContextMenuStrip, die zu einem MenuItem gegossen nicht möglich ist.

Was Sie wollen, ist Ihre tatsächliche geklickt Element, das in der ToolStripItemClickedEventArgs

ist so mit:

string menuText = e.ClickedItem.Text; 

Sie den Text aus dem angeklickt ToolStripItem

0

Sie mischen Dinge erhalten. Die „Strip“ Familie (ContextMenuStrip, ToolStripItem, ToolStripMenuItem ...) ersetzt den alten ContextMenu/MenuItem ... stuff (noch vorhanden für die Abwärtskompatibilität)

Hier die Besetzung scheitern, weil es keine MenuItem und weder ist ToolStripMenuItem aber die Quelle des Ereignisses: die ContextMenuStrip.

Wenn Sie möchten, ist der Text des tatsächlich angeklickt Element sollten Sie die ClickedItem Eigenschaft der Ereignisargumente e hier verwenden; wie auch in Marks Antwort angegeben.
Hinweis ClickedItem eine ToolStripItem zurück (die ToolStripMenuItem von erbt)

+0

Danke so sehr Mark und Sehnsucht! Es ist jetzt viel klarer. – Gerry