Entwickler-Ecke

WinForms - meinprojekt.TabPages.Add(tabPage1) anders darstellen...


tomycat - Mi 26.07.17 15:42
Titel: meinprojekt.TabPages.Add(tabPage1) anders darstellen...
hallo,

je nach einstellung, was ich anklicke, sollen nur bestimmte Tabpages geladen werden.


C#-Quelltext
1:
2:
3:
4:
meinprojekt.TabPages.Add(tabPage1); // so geht

string string_aus_meine_base = "tabPage1";
meinprojekt.TabPages.Add(string_aus_meine_base); // Problem


Delete - Mi 26.07.17 16:18

- Nachträglich durch die Entwickler-Ecke gelöscht -


tomycat - Mi 26.07.17 18:12

kannst du bitte etwas genauer werden.


Delete - Mi 26.07.17 18:53

- Nachträglich durch die Entwickler-Ecke gelöscht -


tomycat - Mi 26.07.17 19:27

ich glaube wir reden aneinander vorbei oder ich habe es falsch erklärt.

tabPage 1 bis 5 sind voll mit Buttons / Textboxen usw...

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
// Programmstart
mypro.TabPages.Remove(tabPage1);
mypro.TabPages.Remove(tabPage2);
mypro.TabPages.Remove(tabPage3);
mypro.TabPages.Remove(tabPage4);
mypro.TabPages.Remove(tabPage5);

// der User loggt sich ein
// laut user abc soll er NUR 1 und 2 sehen.
// Postgresql antwortet mit...
string a = "tabPage1";
string b = "tabPage2";


mypro.TabPages.Add(tabPage1); // <--- so wird das Tab richtig geladen
mypro.TabPages.Add(tabPage2); // <--- so wird das Tab richtig geladen

mypro.TabPages.Add(a); // so habe ich nur ein neuer Tab mit weißem Inhalt, der Tab heist tabPage1
mypro.TabPages.Add(b); // so habe ich nur ein neuer Tab mit weißem Inhalt, der Tab heist tabPage2


Ralf Jansen - Mi 26.07.17 19:35

Zitat:
mypro.TabPages.Add(a); // so habe ich nur ein neuer Tab mit weißem Inhalt, der Tab heist tabPage1


Das ist genau das Verhalten das in einfachen Worten in der Doku so beschrieben ist.
Zitat:
"Erstellt eine Registerkarte mit dem angegebenen Text und fügt es der Auflistung hinzu.
text
Der auf der Registerkarte anzuzeigende Text.."

Warum erwartest du was anderes?

Es gibt keinen magischen Zusammenhang zwischen dem string "tabPage1" und der Instanz einer TabPage die zufällig auch an einer Variablen hängt die tabPage1 heißt.

Wenn du TabPages ein/ausblenden willst benutze die Instanzen der jeweiligen Pages. Irgendwelche strings helfen nicht.
Anstatt Add wäre aber vermutlich Insert sinnvoller um positionsgerecht aus und einblenden zu können, sonst ändert sich unter Umständen die Reihenfolge der Tabs.


Delete - Mi 26.07.17 21:05

- Nachträglich durch die Entwickler-Ecke gelöscht -


Ralf Jansen - Mi 26.07.17 21:45

Zitat:
Visible, auf die man von außen nicht zugreifen kann. Warum?


Weil es diese Eigenschaft von Control erbt aber dann doch nicht bei jedem Control sinvoll nutzbar ist. Darum werden solche Properties üblicherweise zumindest versteckt da man sie nicht entfernen kann (das wäre gegen jedes OO Grundprinzip). Da gibt es aber auch eine Menge anderer Properties von Control die nicht bei jeder Ableitung noch Sinn machen. Z.B. Text, Anchor, Dock etc. Auf Windows API Ebene ist es ja genauso. Nicht jede Windows Nachricht die du da an ein Control senden kannst hat auch irgendeine Auswirkung wie du festgestellt hast.

Und warum ist das so? Historie ... Das Tab Control brauchte vermutlich als es erfunden wurde (so Mitte der 90er mit dem Rest der Common Controls) kein ausblenden/einblenden der Tabs oder es wurde am Anfang nicht für relevant genug gehalten. Das nachträglich zu ändern hätte vermutlich einige Breaking Changes zur Folge, ich denke da zum Beispiel an die Indexierung der Tabs. Das Feature ist daher wohl nie als so relevant angesehen worden um ne Menge Code der funktioniert kaput zu machen nur weil es so etwas schöner ginge.


tomycat - Do 27.07.17 19:54

meine Lösung:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
         private void reiter_laden(string a, string rname)
        {
          
            // ... Switch on the string.
            switch (a)
            {
                case "tabPage1":                                    
                    xx.TabPages.Add(tabPage1);
                    if (rname != "")
                        tabPage1.Text = rname;
                    break;
                case "tabPage2":                 
                    xx.TabPages.Add(tabPage2);
                    if (rname != "")
                        tabPage2.Text = rname;
                    break;
                case "tabPage3":                 
                    xx.TabPages.Add(tabPage3);
                    if (rname != "")
                        tabPage3.Text = rname;
                    break;
                case "tabPage4":                
                    xx.TabPages.Add(tabPage4);
                    if (rname != "")
                        tabPage4.Text = rname;
                    break;
        }


Delete - Do 27.07.17 20:44

- Nachträglich durch die Entwickler-Ecke gelöscht -