Probleme panel et checkbox

Résolu
ghost_of_prog Messages postés 31 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 9 juin 2009 - 12 avril 2007 à 13:13
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 2 mai 2007 à 11:20
Bonjour a tous,

voici mon probleme :
j'ai crée un panel principal dans lequel j' ajoute un autre panel qui contient une checkbox,
ce dernier panel peut etre ajouter dans le panel principal par un bouton "ajouter" et cela sans limite avec cette meme checkbox :

panel_principale <= panel1 <=checkbox1
                            <=panel2 <=checkbox1
                            <=panel3 <=checkbox1
                            <=.....       <=checkbox1

j'ai donc recréé l'evenenment de la checkbox comme suite :

Function ajouter_checkbox(
ByVal L,
ByVal N)
As CheckBox

   Dim obj
As
New CheckBox

   With obj
      .Height = 16
      .Width = 16
      .Left = L
      .Name = N

   End
With
      'Mise en place du gestionnaire d'événements 
      AddHandler obj.Click,
AddressOf checked_box1

   Return obj

End
Function

et quand elle est checker je le control ici :

Sub checked_box1(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
               
end sub

Le probleme c'est que quand je check une box je sais pas de quel panel elle vient hors je voudrais lui ajouter une combobox si elle est checker.

Si vous avez compris ce que je cherche, merci de votre reponse,et si vous voulez plus d'infos demander y a pas de probleme.

Merci

9 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
13 avril 2007 à 13:02
Bonjour

Je te propose un code rapide :

'Recherche parmi les panels sur la form (Me) les panel contenant la checkbox passée en paramètre.
Public Function GetPanel(ByVal pCheck As CheckBox) As Panel
  For Each lControl As Control In Me.control
    If TypeOf lControl Is Panel Then
      For Each lCheck As Control In lControl.Controls
        If TypeOf lCheck Is CheckBox AndAlso pCheck Is lCheck Then
          Return DirectCast(lControl,Panel)
        End If
      Next
    End If
  Next
  Return Nothing
End Function

'Utilisation : 
Public Sub Test
  Dim lPanel As Panel=GetPanel(CheckBox1)
End Sub, ----
(Coloration syntaxique automatique par Kenji)

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 avril 2007 à 13:21
sender te renvoie l'objet à l'origine du déclenchement de l'évènement.

Cet objet comporte entre-autre un nom (Name) que tu as toi même renseigné lors de la création.
Ce nom identifiera l'objet et par extention le panel concerné.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
ghost_of_prog Messages postés 31 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 9 juin 2009 2
12 avril 2007 à 13:31
le probleme c'est que j'ai besoin de garder le meme nom pour ma checkbox car j'effectue un control general sur tout mes panels a la fin.

merci de ta reponse comme meme.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
13 avril 2007 à 12:41
Bonjour

Tu peux utiliser l'orérateur Is pour testes :

If sender is CheckBox1 then
elseif sender is CheckBox2 then
...

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ghost_of_prog Messages postés 31 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 9 juin 2009 2
13 avril 2007 à 12:52
merci NHenry mais le probleme c'est que j'ai un nombre indeterminé de checkbox et que celle-ci ont toutes le meme nom "checkbox1" (un traitement est effectuer sur la checkbox1 de chaque panel) :
panel_principale <= panel1 <=checkbox1
                            <=panel2 <=checkbox1
                            <=panel3 <=checkbox1
                            <=.....       <=checkbox1

Finalement j'ai modifier mon code pour contourner le probleme, mais si quelqu'un a une solution je suis toujours prenneur.
0
ghost_of_prog Messages postés 31 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 9 juin 2009 2
13 avril 2007 à 14:56
j'ai testé ton code, et ca semble etre ce que je recherche, mais je ne sais pas comment passer la checkbox en parametre car le probleme reste le meme, c'est a dire que je ne sais pas identifier la checkbox.
donc voici ce ke j'ai fais :

Public

Function GetPanel(
ByVal name_check
As
String)
As Panel

   For
Each lControl
As Control
In attribut_panel_general.Controls

      If
TypeOf lControl
Is Panel
Then
         For
Each lCheck
As Control
In lControl.Controls

            If
TypeOf lCheck
Is CheckBox
AndAlso name_check
Is lCheck.Name
The
                
 If lCheck.ToString = "System.Windows.Forms.CheckBox, CheckState: 1" Then

                     If lControl.Controls.Item(lControl.Controls.Count - 1).Name = "table" Then
                          lControl.Controls.Item(lControl.Controls.Count - 1).Visible = True
                     Else
                          lControl.Controls.Add(ajouter_menu_table(630, "table", lestables))
                    End If
               Else
                     lControl.Controls.Item(lControl.Controls.Count - 1).Visible = False
                End If

              EndIf
            End
If
         Next
      End
If
   Next
Return
Nothing
EndFunction
'Gestionnaire d'événements
Sub checked_FK(ByVal sender AsObject, ByVal e As System.EventArgs)
   GetPanel(sender.name)                     //(ici sender.name = checkbox1)

EndSub

mais si t'as mieux que :
 If lCheck.ToString = "System.Windows.Forms.CheckBox, CheckState: 1" Then

je suis preneur, parceque ca c'est du bidouillage, voir meme pour le reste.
0
ghost_of_prog Messages postés 31 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 9 juin 2009 2
13 avril 2007 à 15:08
desolé juste une petit modification de ce que j'ai fait plus haut:

If

lCheck.ToString = "System.Windows.Forms.CheckBox, CheckState: 1"
Then
      If lControl.Controls.Item(lControl.Controls.Count - 1).Name = "table"
Then
            lControl.Controls.Item(lControl.Controls.Count - 1).Visible =
True
      Else
            lControl.Controls.Add(ajouter_menu_table(630, "table", lestables))

      End
If
End
If
If lCheck.ToString = "System.Windows.Forms.CheckBox, CheckState: 0"
Then
      If lControl.Controls.Item(lControl.Controls.Count - 1).Name = "table"
Then
            lControl.Controls.Item(lControl.Controls.Count - 1).Visible =
False
      End
If
End
If

je suis a l'ecoute de toutes propositions pour améliorer ce code.
Merci
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
2 mai 2007 à 11:17
Bonjour

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
2 mai 2007 à 11:20
Bonjour

Désolé pour le message précédent, saccade de navigateur.

Je te propose une modification (les lignes avec commentaire, code basé sur ton message du 13/04 à 16h56)

Public Function GetPanel(ByVal name_check AsString) As Panel
   For Each lControl As Control In attribut_panel_general.Controls
      If TypeOf lControl Is Panel Then
         For Each lCheck As Control In lControl.Controls
            If TypeOf lCheck Is CheckBox AndAlso name_check = lCheck.Name Then 'Ici un = à la place du Is
                 If DirectCast(lCheck,CheckBox).Checked Then 'Ici elevement du ToString
                     If lControl.Controls.Item(lControl.Controls.Count - 1).Name = "table" Then
                          lControl.Controls.Item(lControl.Controls.Count - 1).Visible = True
                     Else
                          lControl.Controls.Add(ajouter_menu_table(630, "table", lestables))
                    End If
               Else
                     lControl.Controls.Item(lControl.Controls.Count - 1).Visible = False
                End If
              End If
            End If
         Next
      EndIf
   Next
Return Nothing
End Function, ----
(Coloration syntaxique automatique par Kenji)

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Rejoignez-nous