Probleme panel et checkbox [Résolu]

ghost_of_prog 31 Messages postés jeudi 18 mai 2006Date d'inscription 9 juin 2009 Dernière intervention - 12 avril 2007 à 13:13 - Dernière réponse : NHenry 14260 Messages postés vendredi 14 mars 2003Date d'inscription 16 septembre 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
NHenry 14260 Messages postés vendredi 14 mars 2003Date d'inscription 16 septembre 2018 Dernière intervention - 13 avril 2007 à 13:02
3
Merci
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

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de NHenry
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 12 avril 2007 à 13:21
0
Merci
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 #
Commenter la réponse de cs_casy
ghost_of_prog 31 Messages postés jeudi 18 mai 2006Date d'inscription 9 juin 2009 Dernière intervention - 12 avril 2007 à 13:31
0
Merci
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.
Commenter la réponse de ghost_of_prog
NHenry 14260 Messages postés vendredi 14 mars 2003Date d'inscription 16 septembre 2018 Dernière intervention - 13 avril 2007 à 12:41
0
Merci
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
Commenter la réponse de NHenry
ghost_of_prog 31 Messages postés jeudi 18 mai 2006Date d'inscription 9 juin 2009 Dernière intervention - 13 avril 2007 à 12:52
0
Merci
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.
Commenter la réponse de ghost_of_prog
ghost_of_prog 31 Messages postés jeudi 18 mai 2006Date d'inscription 9 juin 2009 Dernière intervention - 13 avril 2007 à 14:56
0
Merci
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.
Commenter la réponse de ghost_of_prog
ghost_of_prog 31 Messages postés jeudi 18 mai 2006Date d'inscription 9 juin 2009 Dernière intervention - 13 avril 2007 à 15:08
0
Merci
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
Commenter la réponse de ghost_of_prog
NHenry 14260 Messages postés vendredi 14 mars 2003Date d'inscription 16 septembre 2018 Dernière intervention - 2 mai 2007 à 11:17
0
Merci
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
Commenter la réponse de NHenry
NHenry 14260 Messages postés vendredi 14 mars 2003Date d'inscription 16 septembre 2018 Dernière intervention - 2 mai 2007 à 11:20
0
Merci
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
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.