Hallo,
ich wollte ein Menü erstellen und jeden Menüpunkt mit einen Event verknüpfen.
Das Problem ist jetzt nur, dass ich nicht weiß welcher Menüpunkt angeklickt wurde. Wenn ich den Sender auslese, kommt jedesmal nur "MenuItem".
Hier ist mal der Code:
Was sollte ich daran ändern?
MenuBar auswahlMenu = new MenuBar();
Menu file_menu = new Menu ();
for(int a=0; a<stringMitNamen.Count; a++)
{
MenuItem item = new MenuItem(stringMitNamen[a]);
item.Activated += MyEventstart;
file_menu.Append(item);
}
public static void MyEventstart( object objSender, EventArgs e)
{
}
Du musst den sender entsprechend casten.
public static void MyEventstart( object sender, EventArgs e)
{
MenuItem m = (MenuItem)sender;
}
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich glaube, dass habe ich nicht richtig verstanden.
Wenn ich das so mache, dann erscheint in der Console in beiden Fällen ein "Gtk.MenuItem"
public void itemClick(object sender, EventArgs e)
{
MenuItem m = (MenuItem)sender;
Console.WriteLine (m);
Console.WriteLine (sender);
}
Was Du da machst ist nichts anderes als sender.ToString()
auszugeben, und das ist eben die Bezeichnung des Objekts: MenuItem
Das ist sicherlich nicht das, was Du willst. Wäre jedenfalls unüblich.
Aber was Du überhaupt tun willst, ist nicht ersichtlich. Schreibst Du auch nirgends.
"m" ist jedenfalls das MenüItem, das Du angeklickt hast.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo BackPacker,
möchtest du den angezeigten Text ausgeben, dann
Console.WriteLine(m.Text);
Schau dir in der MSDN einfach mal die Eigenschaften dazu an: MenuItem
Weshalb sollen denn die MenuItems alle dieselbe Ereignismethode erhalten? Denn bisher unterscheiden sich diese ja nur am anzuzeigenden Text - und dann innerhalb der Ereignismethode wieder daraus die Unterscheidung zu treffen ist kein gutes Vorgehen.
Ich möchte mit dem geklickten Event dann andere Varibeln setzen. So dass ich damit einige Einstellungen vornehmen kann.
Den Menünamen in einem entspechenenden String zu verwalten, wäre das Ziel.
Also so:
Ergebnis="übergebenerName";
Aus das Ergebnis möchte ich dann mit anderen Methoden wieder zugreifen. Nur bekomme ich es nicht hin, etwas eindeutiges, wie zum bsp den MenüItem Namen oder den MenüItem Index abzufangen.
Die "Console-Ausgabe" soll nur als Hilfe dienen, um zu sehen, welches Objekt gesendet hat. Wenn ich das Objekt caste, wenn ich das so mache, wie im Quelltext, kommt in der Console immernoch "Gtk.MenuItem"
Was mache ich denn nur falsch ?(
public void itemClick(object sender, EventArgs e)
{
MenuItem m = (MenuItem)sender;
Console.WriteLine (m.ToString());
}
Ein solcher Quellttext funktioniert nicht, da eine Fehlermeldung erscheint:
Console.WriteLine(m.Text);
Jetzt erst sehe ich daß du anscheinend GTK-Sharp (GTK#) verwendest - warum postest du dann hier in "Windows Forms" (bzw. erwähnst es nicht einmal)?
Hier die Doku dazu: Gtk.MenuItem. Anscheinend gibt es keine direkte Möglichkeit nachträglich auf den Text oder Namen zuzugreifen 🤔
Es gibt aber ein Child-Objekt (Label), welches intern verwendet wird: Changing Gtk.Label.Text does not always work (hier sieht man den Zugriff).
Müsste also bei dir folgendermaßen lauten:
string text = ((Label)m.Child).Text;
Jetzt erst sehe ich daß du anscheinend GTK-Sharp (GTK#) verwendest - warum postest du dann hier in "Windows Forms" (bzw. erwähnst es nicht einmal)?
sorry, ich habe das leider ins falsche Unterforum gepostet.
Danke dir aber für den Link, bzw den Quelltest damit funktioniert es!