Laden...

Menü bzw. TabControl benutzerabhängig gestalten

Erstellt von stony17 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.060 Views
S
stony17 Themenstarter:in
36 Beiträge seit 2010
vor 11 Jahren
Menü bzw. TabControl benutzerabhängig gestalten

Hallo,
aktuell habe ich ein Programm (Client Programm für Navision Buchungen und SPS-Daten), welches für einen Arbeitsplatz entworfen wurden.
Nun soll es aber auf ca. 15 Arbeitsplätze installiert werden.
Wobei aber jeder Arbeitsplatz ziemlich identisch arbeitet, sich aber in best. Punkten unterscheidet.
Nun ist mein aktuelles Programm mit TabControls aufgebaut. Wobei das erste TabPage die Besonderheiten des Arbeitsplatz abbilden. (Teilweise sind auch noch ein bis zwei weitere TabPage nur für best. Arbeitsplätze notwendig).

Wie könnte ich nun das Programm so aufbauen, das Abhängig vom Benutzer nur best. Tabes sichtbar sind.
Geht das mit den TabControl oder habt ihr vielleicht eine anderen Ansatz dies zu lösen.

lg
stony

lg
stony

P
40 Beiträge seit 2011
vor 11 Jahren

Wie könnte ich nun das Programm so aufbauen, das Abhängig vom Benutzer nur best. Tabes sichtbar sind.
Geht das mit den TabControl oder habt ihr vielleicht eine anderen Ansatz dies zu lösen.

Ein paar mehr Informationen wäre hier schon nötig.
Gibt es aktuell schon ein Login? Wie schaut es mit Berechtigungen aus?
Wie dein Program Sachen anzeigt ist egal, du solltest dir überlegen woher weißt du ob dieser Benutzer nun "Tab A" sehen darf aber nicht "Tab B"?

Simple ausgedrückt brauchst du nur eine Art "Login" Anfang des Programms. Hier kann dann entschieden werden, wer was zu sehen bekommt.

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Stony17

Genereller gesagt, brauchst du nicht einmal ein Login, sondern nur eine Konfiguration.
Du kannst ein config.xml erstellen und darin alles gewünschte definieren.

Beim Start deiner Applikation wird dieses eingelesen und als Einstellungen verwendet.
Wenn das Bedürfniss da ist, kannst für das config.xml ja sogar noch ein GUI machen um es benutzerfreundlich anpassen zu können.....

(z.B. "Screenshot" der Applikation, wo man sich zusammenklicken kann was man gerne möchte..)

Beste Grüsse

Diräkt

S
stony17 Themenstarter:in
36 Beiträge seit 2010
vor 11 Jahren

Hallo,
besten Dank für die Infos.
Das mit der config-Datei bzw. Login ist schon mal ein guter Vorschlag.
Nur mit welchen Steuerelement soll ich das man besten machen.
Sprich best. Tab´s anzeigen.
Geht das mit den Standard Steuerelement TabControl.

lg
stony

lg
stony

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Stony17

Das geht mit allen Controls. Es gibt da Eingenschaften wie Visible oder Enable die sich dafür eignen könnten.

Theoretisch kannst du auch ein Plugin System erstellen um dein Ziel zu erreichen.

Beste Grüsse

Diräkt

4.939 Beiträge seit 2008
vor 11 Jahren

Da das Standard-TabControl bei den TabPages jedoch nicht die Eigenschaften 'Enabled' und 'Visible' unterstützt, wäre die beste Vorgehensweise anhand der Konfiguration die TabPages dynamisch zu erzeugen:


if (config.IsTabEnabled(tabNumber))
{
   TabPage page = new TabPage();
   UserControlX userControl = new UserControlX();
   // ... weitere Initialisierung

   page.Children.Add(userControl);

   tabControl.TabPages.Add(page);

Die einzelnen Seiten solltest du dann als eigenständige UserControls umsetzen (anstatt eine einzige Form mit TabControl und x TabPages im Designer zu erzeugen). Ist besonders bzgl. Datenkapselung ein besserer Weg (ich hoffe mal, daß du es bisher auch schon so gemacht hast - sieht man ja am Screenshot nicht).

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Th69,

Da das Standard-TabControl bei den TabPages jedoch nicht die Eigenschaften 'Enabled' [...] unterstützt, ...

Enabled = false führt bei TabPages wohl nicht dazu, dass man sie nicht mehr in den Vordergrund holen kann, also es ist nicht der Reiter disabled, aber Enabled = false sollte bei TabPages schon so funktionieren, wie bei jedem anderen Container-Control, also so, dass alle enthaltenen Controls disabled werden.

herbivore

2.298 Beiträge seit 2010
vor 11 Jahren

Hallo herbivore,

wenn ich mich recht entsinne hatten TabPages keine Eigenschaft Enabled.

To Topic:

Wenn der Reiter sichtbar sein darf, nur nicht aufgerufen werden darf, bietet sich eine Prüfung eventuell im TabSelecting Event des TabControls an. Ist der Nutzer nicht berechtigt, wird im EventHandler halt abgebrochen und die bisherige TabPage weiterhin angezeigt.

-> In einem Programm aus unserem Hause haben wir es so gehandhabt, das TabPages komplett ausgeblendet wurden (also mittels TabControl.TabPages.Remove()), wenn die Berichtigung für die TabPage nicht gegeben war.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

S
93 Beiträge seit 2008
vor 11 Jahren

Stimmt, bei den Tab-Pages gibt es kein Enable und auch kein Visible.

Ich hatte das selbe Problem, und ich habe das so gelöst, daß ich das Tab-Control und TabPage abgeleitet habe, und mir mein eigenes Property Visible gebaut habe.

Ganz einfach bei Visible= false die TabPage in ein Objekt gespeichert, und dann mit Remove entfernt. Wenn ich das anschließend wieder auf Visible=true gesetzt habe, wird es einfach aus dem Objekt wieder mit Add zum TabControl hinzugefügt, und es funktioniert wieder ganz normal.

Wenn es hier bei einem Arbeitsblatz immer ausgeblendet sein soll, muß man es ja nicht einmal zwischenspeichern.

R
158 Beiträge seit 2007
vor 11 Jahren

Denkbar ist

tabControl1.TabPages.Remove(tabPage1); //Ausblenden

tabControl1.TabPages.Add(tabPage1); //Einblenden

sprich: die nicht gewünschten Tabs aus der TabPageCollection des betr. TabPageControls entfernen (bedingt natürlich, dass die Collection=die TabPages bereits zur Designzeit vorhanden ist).

Das nicht sichtbar machen in Abhängigkeit des Benutzers (entweder über eine Art Login oder über den Computernamen/Netzwerknamen) ist allemal besser als die entspr. Tab nur zu disablen -> würde nur unnötige Fragen des Benutzers produzieren 😉

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo inflames2k, san-software

Stimmt, bei den Tab-Pages gibt es kein Enable und auch kein Visible.

nein, das stimmt nicht. TabPage erbt von Panel und damit indirekt auch von Control und da Control beide Properties hat, erbt natürlich auch TabPage diese. Das ist ein Grundprinzip der Objektorientierung.

Allerdings ist laut MSDN Doku die Eigenschaft überschrieben und mit [BrowsableAttribute(false)] gekennzeichnet. Deshalb wird sie in IntelliSense nicht angezeigt. Wegen des BrowsableAttribute kann man sich darauf, was IntelliSense anzeigt, nie verlassen, wenn es darum geht, ob ein Member nicht vorhanden ist.

Und auch wenn die Doku sagt, "Dieser Member hat für das genannte Steuerelement keine Bedeutung.", funktioniert es doch so, wie ich gesagt habe: Setzt man Enabled der TabPage auf false, dann werden alle Elemente, die sich darauf befinden, disabled.

herbivore