title image


Smiley Ein Container ist ein Objekt, das andere Objekte enthalten kann
Also:

- Eine Form ist ein Objekt

- Ein Steuerelement ist ein Objekt

- Jeder Container ist ein Objekt, aber nicht jedes Objekt ist ein Container

- Ein Container ist ein Objekt, das andere Objekte enthalten kann

- folglich ist eine Form ein Container (kann Steuerelemente enthalten)

- und ein Frame (kann Steuerelemente enthalten)

- und eine Picturebox (kann Steuerelemente enthalten)...

- aber zB eine Textbox, Commandbutton... nicht

- jedes Steuerelement hat eine Container-Eigenschaft (kann auch anders heißen, zB Parent),

   das angibt, in welchem Container das Steuerelement ist.



Beispiel:

Wenn du zur Entwurfszeit auf eine Form eine Textbox ziehst, belegt VB die Container-Eigenschaft

der Textbox mit der Form auf der sie platziert wurde.

Wenn du jetzt ein Frame auf die Form ziehst, belegt VB die Container-Eigenschaft des Frames mit

der Form.

Jetzt hast du zwei verschiedene Container, einmal die Form und einmal das Frame.

Wenn jetzt das Frame markiert ist und du ziehst einen Button darauf, belegt VB die Container-

Eigenschaft des Buttons mit dem Frame.

Wenn du dann die Form markierst, und du ziehst einen weiteren Button rüber, dann belegt VB die

Container-Eigenschaft des Buttons mit der Form

Es wird immer der aktive Container genommen (oder der Container des aktiven Steuereelements, wenn

dieses kein Container ist).

Wenn du jetzt die Position des Frames änderst, wird der erste Button (also der, dessen Container

auf das Frame gesetzt ist) mit verschoben, alle anderen Steuerelemente bleiben da, wo sie platziert

wurden.

Ein Steuerelement kann sich also nur in dem Bereich des Containers befinden und wird mit diesem

verschoben.



Wenn du ein Steuerelementfeld definierst, indem du zur Entwurfszeit nur eine Textbox erstellst

und dieser den Index 0 gibst und alle anderen Textboxen erst zur Laufzeit mit Load erstellst,

dann passiert im Prinzip genau das gleiche.

Allerdings bin ich mir da dann nicht sicher, welcher Container für das neue Steuerelement gesetzt

wird. Deshalb setze ich den eben selbst, indem ich die Container-Eigenschaft der neuen Textbox explizit

auf das Frame setze (schadet ja nicht, wenn VB das gleiche gemacht hat) (Set nicht vergessen, das ist

eine Objektzuweisung).

Die neuen Steuerelemente sind im Prinzip eine Kopie des ersten Steuerelements, sie haben also auch

die gleichen Top, Left, Height, Width... Eigenschaften und man muß sie demzufolge so platzieren,

daß sie sich nicht gegenseitig verdecken. Das Feature, daß das neue Steuerelement unsichtbar ist,

hat M$ wahrscheinlich deshalb gemacht, damit es nicht zu einfach wird:))), also .Visible = True

nicht vergessen.





Solange die Steuerelemente einmal platziert sind und dann ihre Position/Sichtbarkeit nicht mehr ändern,

ist es relativ egal, in welchem Container sie sind (Ausnahme: Optionbuttons, da gehören immer

alle Optionbuttons eines Containers zusammen).

Wenn man allerdings die Frames zum Verschieben, Ausblenden und/oder Umschalten zwischen verschiedenen

Ansichten nutzt (so wie ich öfters), dann ist es wichtig, welches Steuerelement in welchem Container ist.

So wie zur Entwurfszeit die Steuerelemente mit verschoben werden die auf dem Frame sind, so ist es

auch zur Laufzeit. Wenn man per Code ein Frame verschiebt (Move-Methode oder Top,Left... Eigenschaften)

dann werden auch alle darauf liegenden Steuerelemente (also die, deren Container-Eigenschaft das Frame

ist) verschoben. Genauso verhält es sich, wenn man das Frame auf Visible=False (oder True) setzt.





Nachtrag zu: Ausnahme: Optionbuttons

Da immer alle Optionbuttons eines Container zusammengehören (also nur einer davon aktiviert sein kann),

kann man sich mit Frames helfen, wenn man mehrere unabhängige Optionbutton-Blöcke auf einer Form braucht.

Einfach für jeden Optionbutton-Block ein Frame aufnehmen, auf das dann die Optionbuttons kommen. Wenn

man den Rahmen darum nicht will, kann man ja beim Frame die BorderStyle-Eigenschaft auf 0 setzen.







Gruß

Gaga



PS: Die im Beispiel verwendeten Steuerelemente sind eben ein Beispiel, das funktioniert eigentlich

mit allen Steuerelementen gleich. Ob ein Steuerelement ein Container ist oder nicht, sieht man am besten in der Hilfe (MSDN) nach.




Gruß
Gaga

___________________________________________________________________

Profilösungen für VB6
wenn nicht anders angegeben, sind alle Codebeispiele nicht getestet, nur getippt


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: