Benutzer mit den meisten Antworten
Wie schließe ich die in einem Fenster Menüs beim verlassen des Mauszeigers?

Frage
-
Hallo,
Ich schreibe gerade eine C# Programm. Habe auf dem Windows-Form Menuleiste Optionen und Info.Wenn der Mauszeiger auf dem Menüleiste ist zeigt er die Untermenü optionen. Ich möchte das beim verlassen des Mauszeigers die Optionen oder Info Menü wieder "schließen" wird.
private void MenuShow_MouseHover(object sender, EventArgs e) { if (sender is ToolStripDropDownItem) { ToolStripDropDownItem item = sender as ToolStripDropDownItem; if (item.HasDropDownItems && !item.DropDown.Visible) item.ShowDropDown(); } } private void MenuClose_MouseLeave(object sender, EventArgs e) { ToolStripDropDownItem item = sender as ToolStripDropDownItem; item.DropDown.Close(); }
Das sollte eigentlich wie im Obigen Programm funktionieren. Aber es spuckt eine Gelb markierte Fehler aus.
Object reference not set to an instance of an object.
In welcher Zeile denke ich Falsch?
MfG
Adrianos
- Bearbeitet TaMBeY Freitag, 6. Juli 2012 13:32
Antworten
-
Soweit versteh ich erstmal was du vor hast. Der Fehler entsteht, weil sender ein Objekt von dem Typ ist, wo du Leave aboniert hast. Das ist in meinem Fall das Menu selbst gewesen. Darum konntest du das auch nicht in ein
ToolStripDropDownItem
casten und darum war es nicht initialisiert. Du müsstest ein Event abonieren, das ausgelöst wird wenn die Maus über keinem der Enthaltenen Items mehr ist. Da gibt es aber, soweit ich weiß keines.
Ich würde es auch dem Benutzer überlassen das Menu wieder zuschließen, weil wenn die Maus nurmal wegrutscht, ist das Menu wieder zu, auserdem ist es der normale Benutzer gewöhnt klicken zu müssen, damit etwas aufgeht. Wenn du es brauchst, dann bau es ein, ich wollte dich nur nochmal darauf hinweisen, das man nicht alzusehr von irgendwelchen Windowskonformen Sachen abweichen sollte.
Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort vorgeschlagen U.lf Ka.dner Samstag, 7. Juli 2012 09:54
- Als Antwort markiert TaMBeY Sonntag, 8. Juli 2012 12:36
Alle Antworten
-
Hallo,
Ich weis zwar nicht so wirklich was du vor hast, aber der Fehler:
Object reference not set to an instance of an object.
lässt darauf schließen, das dein Objekt auf das du zugreifen willst nicht mit new initialisiert wurde.
Handelt es sich bei dem Fehler um einen Compilerfehler/-warnung oder um eine wärend der Laufzeit geworfene Exception? In wecher Zeile steht denn der Fahler?
Koopakiller - http://koopakiller.ko.ohost.de/
-
Ich möchte wenn der Mauszeiger sich auf dem Menüleiste befindet das der Benutzer die Untermenüpunkte angezeigt bekommt(Ohne das der Benutzer auf irgendeine Menüpunkt im Menüleiste mit der Linke Maustaste drückt)
Das funktioniert so:
private void MenuShow_MouseHover(object sender, EventArgs e)
{
if (sender is ToolStripDropDownItem)
{
ToolStripDropDownItem item = sender as ToolStripDropDownItem;
if (item.HasDropDownItems && !item.DropDown.Visible)
item.ShowDropDown();
}
}
Jetzt möchte ich das wenn das beim verlassen der Untermenüpunkt die Menustript wieder schließt. Also beim verlassen der Untermenüpunkt soll sich die Menü wieder schließen.
So die Fehler wird im Laufzeit ausgeworfen d.h. Und es ensteht wenn ich mit der Mauszeiger die Menüleiste verlasse.
Geht es den vielleicht mit Item not clicked? Close MenuItem?- Bearbeitet TaMBeY Freitag, 6. Juli 2012 13:52
-
Soweit versteh ich erstmal was du vor hast. Der Fehler entsteht, weil sender ein Objekt von dem Typ ist, wo du Leave aboniert hast. Das ist in meinem Fall das Menu selbst gewesen. Darum konntest du das auch nicht in ein
ToolStripDropDownItem
casten und darum war es nicht initialisiert. Du müsstest ein Event abonieren, das ausgelöst wird wenn die Maus über keinem der Enthaltenen Items mehr ist. Da gibt es aber, soweit ich weiß keines.
Ich würde es auch dem Benutzer überlassen das Menu wieder zuschließen, weil wenn die Maus nurmal wegrutscht, ist das Menu wieder zu, auserdem ist es der normale Benutzer gewöhnt klicken zu müssen, damit etwas aufgeht. Wenn du es brauchst, dann bau es ein, ich wollte dich nur nochmal darauf hinweisen, das man nicht alzusehr von irgendwelchen Windowskonformen Sachen abweichen sollte.
Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort vorgeschlagen U.lf Ka.dner Samstag, 7. Juli 2012 09:54
- Als Antwort markiert TaMBeY Sonntag, 8. Juli 2012 12:36