Bonjour.
Alors voila, je fais une application Winforms en C# pour Windows et j'utilise Visual Studio .NET 2003.
J'ai donc une form principale (Form1) dans laquelle j'ai ajoute un panel (panel1) possedant une image de fond.
Le panel peut avoir 2 tailles principalement (depends en fait de 2 images differentes), mais j'aimerai que ce soit relativement adaptable (ie quelle que soit la taille de l'image).
Maintenant, j'aimerai que le panel reste au centre de la form quelle que soit sa taille (La fenetre peut donc etre resizee), avec apparition d'ascenceurs de scroll si la taille du panel est plus grande que celle de la form, comme pour le "Windows Picture Viewer" sous XP par exemple.
Ce que j'ai fait pour l'instant, c'est mettre l'attribut "autoscroll" a "true" pour la form, et calculer la position du panel en fonction des tailles respectives du panel et de la form.
Un peu de code pour que ca soit plus clair:
Dans la methode InitializeComponent de la Form (genere automatiquement donc):
Code :
- this.AutoScaleBaseSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScaleBaseSize" ))); // Valeur a true
- this.AutoScroll = ((bool)(resources.GetObject("$this.AutoScroll" ))); // Valeur a true
- this.AutoScrollMargin = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMargin" ))); // Valeurs a 0 et 0
- this.AutoScrollMinSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMinSize" ))); // Valeurs a 0 et 0
|
Puis pour que la position soit calculee a l'instanciation et a chaque fois que la fenetre change de taille, voici la methode CenterSoccerGround dans Form1, appelee par le constructeur puis a chaque fois que la fenetre change de taille (grace a l'event Resize):
Code :
- private void CenterSoccerGround()
- {
- if (this.panel1 != null)
- {
- this.panel1.Location = new System.Drawing.Point((this.ClientSize.Width - this.panel1.Width) / 2, (this.ClientSize.Height - this.panel1.Height) / 2);
- }
- }
|
Ca marche pas mal (a part que c'est un peu lent mais ca ne vient peut-etre pas de la), sauf que quand la taille de la fenetre est plus petite que celle du panel, la position de ce dernier devient donc negative et le scroll commencant a la position 0, on ne peut pas acceder aux parties extremes gauche et/ou haut.
Ma question est donc (on y arrive ), comment faire pour que ca marche, y compris pour les cotes extremes (gauche et haut)?
Peut-etre faut-il faire autrement, mais apres de longs jours de recherche grace a Google et sur les forums de programmation, je n'ai pas trouve de methode pour faire ca...
Je precise que c'est mon premier programme en C#, mais que j'ai quelques annees d'experience de programmation en C (surtout) et C++ sous Unix, ainsi qu'un peu sous Visual Studio (un peu de Java aussi a mon actif). En gros, je suis etudiant...
Voila, merci d'avance.
Mooga
PS: Desole pour le manque d'accents, mais je suis en Irlande avec des claviers "qwerty", donc c'est pas facile...
Je les rajouterai si c'est genant...
Message édité par Mooga le 12-12-2005 à 14:26:03