damiengarnier
Messages postés8Date d'inscriptionvendredi 3 avril 2009StatutMembreDernière intervention16 avril 2009
-
15 avril 2009 à 16:12
nediarawen -
17 mars 2013 à 19:22
Bonjour à tous et merci d'avance de prendre un peu de temps pour me venir en aide,
Je suis chargé de créer un assistant informatique de gestion commerciale. Ce programme réalisé sous Visual Studio 2008 Express permettra à l'utilisateur de consulter des graphiques statistiques de l'activité commerciale de la société.
J'ai déjà développé dans le passé des applications sous MS ACCESS mais j'ai décidé de me mettre à visual studio pour réaliser une application plus professionnelle. Le problème est que pas mal de choses change entre ACCESS et Visual studio concernant la programmation. Je poserai donc régulièrement des questions (j'espère le moins souvent possible, c'est en faisant qu'on apprend) tout au long du développement de mon application.
Voilà mon problème :
J'ai créer un formulaire MainForm. Dans ce dernier, j'ai inséré un MenuStrip permettant d'accéder à divers département de la société. Pour le moment, je m'intéresse seulement à la partie "Commercial".
Sur l'évènement "CommercialTableauDeBordCompletToolStripMenuItem.Click", je souhaite afficher les différents graphiques au sein de MainForm. Pour se faire, j'ai écrit le code suivant :
Public Class MainForm
'Décalaration et instanciation d'une TableLayoutPanel
Dim MainPanel As New TableLayoutPanel
Private Sub LoadMainPanel(ByVal NbColonnes As Integer, ByVal NbLignes As Integer)
Me.Controls.Add(MainPanel)
'Configuration graphique de MainPanel
With MainPanel
.Dock = DockStyle.Fill
.ColumnCount = NbColonnes
.RowCount = NbLignes
End With
Dim ColonnesStyles As TableLayoutColumnStyleCollection = MainPanel.ColumnStyles
Dim LignesStyles As TableLayoutRowStyleCollection = MainPanel.RowStyles
For Each style As ColumnStyle In ColonnesStyles
style.SizeType = SizeType.Percent
style.Width = 100% / NbColonnes
Next
For Each style As RowStyle In LignesStyles
style.SizeType = SizeType.Percent
style.Height = 100% / NbLignes
Next
End Sub
Private Sub CommercialTableauDeBordCompletToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles CommercialTableauDeBordCompletToolStripMenuItem.Click
LoadMainPanel(2, 2)
'Déclaration et instanciation des DataGridView
Dim NewDataGridView1 As DataGridView = New DataGridView
Dim NewDataGridView2 As DataGridView = New DataGridView
Dim NewDataGridView3 As DataGridView = New DataGridView
Dim NewDataGridView4 As DataGridView = New DataGridView
'Ajout des DataGridView au MainPanel
With MainPanel
.Controls.Add(NewDataGridView1, 0, 0)
.Controls.Add(NewDataGridView2, 0, 1)
.Controls.Add(NewDataGridView3, 1, 0)
.Controls.Add(NewDataGridView4, 1, 1)
End With
For i = 0 To 3
Me.MainPanel.Controls(i).Anchor = AnchorStyles.Bottom _
Or AnchorStyles.Left _
Or AnchorStyles.Right _
Or AnchorStyles.Top
Next
End Sub
Étant en phase de test concernant la gestion de MainPanel, j'insère des DataGridView pour vérifier la bonne disposition des colonnes et lignes de MainPanel.
Je lance le débogage, je clique sur menu Commercial puis Tableau de bord complet et je devrais obtenir un quadrillage régulier de 2x2. Au lieu de cela, j'obtiens :
Je remarque plusieurs choses :
1 - Les colonnes ne sont pas de la même taille. Pourtant, dans le code, je demande que les colonnes soit de type pourcentage et qu'elles soient égales à 100/NbColonnes
2 - Idem que 1 mais pour les lignes
3 - La propriété Dock MainPanel étant sur Fill, MainPanel prend toute la place disponible mais la position Bottom n'est pas en dessous du MenuToolStrip mais tout en haut du formulaire (Voir cercle rouge).
J'ai pourtant moulte cherché au travers le forum de ce site et autres mais je ne trouve pas la solution.
Alors, à tous ceux qui auraient des élèments de solution, je vous remercie d'avance pour me les faire partager et j'espère que la résolution de ce problème aidera d'autres développeurs.
damiengarnier
Messages postés8Date d'inscriptionvendredi 3 avril 2009StatutMembreDernière intervention16 avril 2009 15 avril 2009 à 19:12
Et bien aujourd'hui aura été la journée de l'inspiration : J'ai résolu mes problèmes.
Voici le résultat pour ceux qui voudront s'en inspirer.
Public Class MainForm
'Décalaration et instanciation d'une TableLayoutPanel
Dim MainPanel As New TableLayoutPanel
Private Sub LoadMainPanel(ByVal NbColonnes As Integer, ByVal NbLignes As Integer)
'Ajout de MainPanel au MainFormPanel
Me.MainFormPanel.Controls.Add(MainPanel)
'Configuration graphique de MainPanel
With MainPanel
.Dock = DockStyle.Fill
.ColumnCount = NbColonnes
.RowCount = NbLignes
.CellBorderStyle = TableLayoutPanelCellBorderStyle.Outset
End With
Dim i As Integer
i = NbColonnes
Do
MainPanel.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 100.0! / NbColonnes))
i = i - 1
Loop Until i = 0
Dim j As Integer
j = NbLignes
Do
MainPanel.RowStyles.Add(New RowStyle(SizeType.Percent, 100.0! / NbLignes))
j = j - 1
Loop Until j = 0
End Sub
Private Sub CommercialTableauDeBordCompletToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles CommercialTableauDeBordCompletToolStripMenuItem.Click
'Chargement de MainPanel
LoadMainPanel(3, 3)
'Configuration graphique des contrôles appartenant à MainPanel
Dim ControlsCollection As TableLayoutControlCollection = MainPanel.Controls()
For Each Control As Control In ControlsCollection
Control.Dock = DockStyle.Fill
Next
damiengarnier
Messages postés8Date d'inscriptionvendredi 3 avril 2009StatutMembreDernière intervention16 avril 2009 15 avril 2009 à 16:43
J'ai résolu le problème concernant la position de MainPanel (Problème n°3 du message précédent). C'est bête comme chou...
J'ai inséré en mode design un Panel dans mon formulaire et j'ai mis la propriété de celui-ci à Fill. Ensuite dans le code, j'insère MainPanel non pas dans le formulaire mais dans le panel que j'ai préalablement créé en mode design.