Gérer les Tab d'un TabStrip indépendamment :
Un exemple téléchargeable sur la forge de Gambas nous servira de base :
TabStrip Notre souci, ici, est la gestion des évènements liés à la position de la Form sachant que le premier Tab implique que la Form n'est pas "resizable" alors que les deux autres le sont.
Nous voulons que la Form soit toujours centrée et retrouve ses dimensions initiales quand le premier Tab est cliqué ou quand c'est lui qui est affiché.
pour cela nous utilisons deux évènements concernant les TabStrip :
1
| PUBLIC SUB TabStrip1_Arrange()
|
et
1
| PUBLIC SUB TabStrip1_Click()
|
Plus qu'un long discours voici l'intégralité du code de notre exemple :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| ' Gambas class file
PUBLIC SUB Form_State() ' <------------------------------------------------------ évènement marquant les changements d'état de la Form (maximized, minimized, fullscreen)
' If Me.Maximized And Me.FullScreen Then Me.FullScreen = False 'pour empêcher les deux en même temps
END
PUBLIC SUB TabStrip1_Arrange() '<------------------------------------------------ lors du rangement par les TabStrip, cet évènement permet de rendre compte d'un état du tabstrip
SELECT CASE TabStrip1.Index '<----------------------------------------------- l'index des onglets commence à zéro pour le premier CASE 0 '-------- pour avoir les deux en même temps ----------- DECOMMENTER LA LIGNE DE FORM_STATE() et inversement commenter celles entre les pointillés IF ME.Maximized AND ME.FullScreen THEN ME.Maximized = TRUE ME.FullScreen = FALSE ENDIF '-------- pour avoir les deux en même temps ----------- IF ME.Maximized THEN ME.Maximized = FALSE IF ME.FullScreen THEN ME.FullScreen = FALSE ME.Resizable = FALSE '<-------------------------------------------- la form n'est pas resizable si on clique sur le premier onglet ME.Center CASE 1 ME.Resizable = TRUE '<--------------------------------------------- la form est resizable si on clique sur le second CASE 2 ME.Resizable = TRUE '<--------------------------------------------- la form est resizable si on clique sur le troisième END SELECT
END
PUBLIC SUB TabStrip1_Click() '<------------------------------------------------- lors d'un click sur un des tab du tabstrip, cet évènement permet de rendre compte de l'action sur un onglet du tabstrip
SELECT CASE TabStrip1.Index CASE 0 mesuresOrigine() ME.Center '----------- GROS BUG ----------- <------------------------------- ce bug fait perdre les dimensions et la position ' Case 1 ' ce qui est le contraire de ce que l'on cherchait ' Me.center ' décommenter et tester ' Case 2 ' Me.center '----------- GROS BUG ----------- END SELECT
END
PUBLIC SUB Form_Open() '<-------------------------------------- au moment de l'ouverture du programme on sauvegarde les dimensions et position de la Form Settings["orig/Top"] = ME.Top Settings["orig/Left"] = ME.Left Settings["orig/Height"] = ME.Height Settings["orig/Width"] = ME.Width
END
PUBLIC SUB mesuresOrigine() '<--------------------------------- on peut rappeler ces dimensions et position grâce à une procédure, utilisée dans TabStrip1_Click() ME.Width = Settings["orig/Width"] ME.Height = Settings["orig/Height"] ME.Top = Settings["orig/Top"] ME.Left = Settings["orig/Left"]
END
PUBLIC SUB Menu1_Click() '<----------------------------------- menu pour mettre en plein écran sauf si la form n'est pas resizable
IF ME.Resizable THEN ME.FullScreen = NOT ME.FullScreen ENDIF
END
|
Une image dans l'IDE (regarder les propriétés de chaque élément) :
====================
====================
Navigation :
<-- Liens du Wiki : <--<-- Accueil du WIKI : <-- ====================
Documentation :
====================