Hi Leute,
ich bin da gerade über etwas seltsames gestolpert:
Mein Chef wollte, dass die Menüeinträge, an die ein User gerade eh nicht rankommt nicht nur deaktiviert (also ausgegraut) sondern komplett unsichtbar sind, dadurch war eine kleine Umstrukturierung der Funktionen notwendig, die die Fenster für die Anzeige vorbereiten.
Ich definiere die Sichtbarkeit bestimmter Menüeinträge nun abhängig davon, in welchem Zustand sich das aktuelle Programm befindet (welche Registerkarten angezeigt werden, welche Berechtigung der User hat, mit welchen Parametern bestimmte Dialoge geöffnet wurden usw.) dadurch kann es kommen, dass ab und zu mehrere Menüseparatoren hintereinanden stehen oder das Menü von vorneherein mit einem Separator anfängt (weil die Einträge darüber oder dazwischen gerade ALLE ausgeblendet sind). Ich dachte mir nun, ich überprüfe einfach die Sichtbarkeit der darüberliegenden Menüeinträge und blende dann den Separator auch aus, also so nach dem Motto
Das Problem ist nun, dass der Separator gar nicht erst angezeigt wird, weil aus irgendwelchen Gründen die Abfrage nach der Visible-Eigenschaft des MenuItems grundsätzlich mit False zurückkommt. Hat das irgendeinen Grund, oder spinnt da einfach nur meine Entwicklungsumgebung (VS 2005)?
Ich habe auf der anderen Seite aber definitiv keine Lust, alle möglichen Bedingungen aus den oberen drei Zeilen in der vierten zeile zu verodern, schon allein weil das für Änderungen hinterher wieder eine große Fehlerquelle ist, wenn z.B. plötzlich entschieden wird, dass bestimmte MA aus dem Verkauf die Lagersicht sehen dürfen, aber nur der Lagerist ändern darf, ist dieses Menü plötzlich wieder für den Verkauf sichtbar, aber wieder nicht für alle, und schon sitze ich (oder mein Nachfolger) da und muss diese Anpassung an 2 Stellen im Code durchführen.
Eine andere Möglichkeit wäre eine Variable mitzuführen, die positiv geschaltet wird, wenn eines sichtbar ist, also nach der Art
aber dann muss man wieder darauf achten, dass die Variable anzeigen korrekt mitgeführt und zurückgesetzt wird, was dann wieder einen extra Aufwand bedeutet, wenn bestimmte Menüpunkte plätzlich in andere Gruppen wechseln.
Die Frage ist nun also, warum erhalte ich bei der Abfrage der Visible-Eigenschaft eines ToolStripMenuItems ein False, obwohl ich sie gerade eben auf True gesetzt habe, und wie kann ich dieses Problem umgehen?
Schönen Gruß
Martin Dietz
ich bin da gerade über etwas seltsames gestolpert:
Mein Chef wollte, dass die Menüeinträge, an die ein User gerade eh nicht rankommt nicht nur deaktiviert (also ausgegraut) sondern komplett unsichtbar sind, dadurch war eine kleine Umstrukturierung der Funktionen notwendig, die die Fenster für die Anzeige vorbereiten.
Ich definiere die Sichtbarkeit bestimmter Menüeinträge nun abhängig davon, in welchem Zustand sich das aktuelle Programm befindet (welche Registerkarten angezeigt werden, welche Berechtigung der User hat, mit welchen Parametern bestimmte Dialoge geöffnet wurden usw.) dadurch kann es kommen, dass ab und zu mehrere Menüseparatoren hintereinanden stehen oder das Menü von vorneherein mit einem Separator anfängt (weil die Einträge darüber oder dazwischen gerade ALLE ausgeblendet sind). Ich dachte mir nun, ich überprüfe einfach die Sichtbarkeit der darüberliegenden Menüeinträge und blende dann den Separator auch aus, also so nach dem Motto
Code:
Me.mnuBearbeitenKonstr.Visible = ... Me.mnuBearbeitenVerkauf.Visible = ... Me.mnuBearbeitenLager.Visible = ... Me.mnuBearbeitenSep1.Visible = Me.mnuBearbeitenKonstr.Visible Or Me.mnubearbeitenVerkauf.Visible _ Or Me.mnuBearbeitenLager.Visible
Ich habe auf der anderen Seite aber definitiv keine Lust, alle möglichen Bedingungen aus den oberen drei Zeilen in der vierten zeile zu verodern, schon allein weil das für Änderungen hinterher wieder eine große Fehlerquelle ist, wenn z.B. plötzlich entschieden wird, dass bestimmte MA aus dem Verkauf die Lagersicht sehen dürfen, aber nur der Lagerist ändern darf, ist dieses Menü plötzlich wieder für den Verkauf sichtbar, aber wieder nicht für alle, und schon sitze ich (oder mein Nachfolger) da und muss diese Anpassung an 2 Stellen im Code durchführen.
Eine andere Möglichkeit wäre eine Variable mitzuführen, die positiv geschaltet wird, wenn eines sichtbar ist, also nach der Art
Code:
Dim anzeigen as Boolean = False If ... Then anzeigen = True Me.mnuBearbeitenKonstr.Visible=True else Me.mnuBearbeitenKonstr.Visible=False End If If ... Then anzeigen = True Me.mnubearbeitenVerkauf.Visible=True else Me.mnuBearbeitenVerkauf.Visible=False End If If ... Then anzeigen = True Me.mnuBearbeitenLager.Visible=True Else Me.mnuBearbeitenLager.Visible=False End If Me.mnuBearbeitenSep1.Visible=anzeigen anzeigen=False
Die Frage ist nun also, warum erhalte ich bei der Abfrage der Visible-Eigenschaft eines ToolStripMenuItems ein False, obwohl ich sie gerade eben auf True gesetzt habe, und wie kann ich dieses Problem umgehen?
Schönen Gruß
Martin Dietz
Comment