Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Bloquer tous les controls


Sujet :

VB.NET

  1. #1
    Membre du Club
    Bloquer tous les controls
    Bonsoir,

    Comme toujours, je m'adresse à vous après de nombreuses recherches sans résultat concluant.
    J'ai dans un form, des TextBox, Combobox, Labels et 1 DateTimePicker. J'aimerais pouvoir bloquer leurs modification lorsque que je ne suis pas dans le mode "Edition".

    Il y a bien évidement la propriété .enable , qui rempli les critères.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Unlock_control(ok As Boolean)
            For Each onglets As TabPage In Me.TabControl1.Controls
                For Each ctrl As Control In onglets.Controls
                    ctrl.Enabled = False
                Next
            Next
        End Sub


    Mais le soucis est que les controls sont alors grisés et la lecture n'est pas adaptée.
    J'ai essayer de modifier leurs backcolor et forecolor mais cela ne fonctionne pas très bien pour les textbox et pas du tout pour les combobox.

    Alors pensez vous qu'il existe d'autre moyens ?
    En vous remerciant.

  2. #2
    Membre chevronné
    Bonsoir,

    Une solution (vite fait mais peut-être fastidieuse à gérer) est la suivante :

    Tu places un TextBox inutile et invisible sur le Form, soit TBInutile ce TextBox.

    Pour tout contrôle que tu veux bloquer (sans que ça se voit), en réponse à l'événement GotFocus de ce contrôle, tu programmes TBInutile.Select.

    Par exemple, pour empêcher la modif d'un TextBox TextBox1 de ton application :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
       TBInutile.Select
    End Sub


    Bien entendu, comme il faut bien pouvoir encoder quelque chose de temps en temps, une condition peut être nécessaire :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
       If CondionDeBlocageNecessaire Then
          TBInutile.Select
       End If
    End Sub


    En fait la solution est pénible à gérer s'il y a beaucoup de composants à contrôler ...

    Bon amusement,



  3. #3
    Membre du Club
    Merci pour votre réponse.
    Malheureusement j'ai une vingtaine de controls donc pas très propre comme solution..

    Pensez-vous qu'il est possible de faire le même principe , mais au clic dans le TabControl (ou sont regourpées mes textbox et autres?). J'ai essayé mais le clic n'est pas considéré comme étant dans le tabcontrol..


    Merci

  4. #4
    Membre chevronné
    Le principe reste bon. Il te faut trouver un événement qui se produit quand un des TabControl reçoit le focus. Je ne suis plus à l'ordi et je ne peux tester. Il faut voir les événements Click, Enter, ...
    Bonne chance ... et bonne nuit

  5. #5
    Membre averti
    Bonjour,

    Il te suffit de réaffecter temporairement les événements de click et focus des controls que tu veux bloquer


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    si edition = off
    'on enlève les anciennes liaisons
    RemoveHandler listbox1.click, AddressOf listBox1_click
    RemoveHandler listbox2.click, AddressOf listBox2_click
    RemoveHandler textbox1.click, AddressOf TextBox1_click
     
    ' on ajoute les nouvelles
    AddHandler listbox1.click, AddressOf sub_edition_off
    AddHandler listbox2.click, AddressOf sub_edition_off
    AddHandler textbox1.click, AddressOf sub_edition_off
     
    etc...

    puis de remettre en ordre quand tu en as besoin :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if edition = on
    'on enlève les anciennes liaisons
    RemoveHandler listbox1.click, AddressOf sub_edition_off
    RemoveHandler listbox2.click, AddressOf sub_edition_off
    RemoveHandler textbox1.click, AddressOf sub_edition_off
    
    ' on ajoute les nouvelles
    AddHandler listbox1.click, AddressOf listBox1_click
    AddHandler listbox2.click, AddressOf listBox2_click
    AddHandler textbox1.click, AddressOf TextBox1_click
    
    etc...


    ici la sub de remplacement :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    sub_edition_off (ByVal sender As Object, ByVal e As System.EventArgs)
    XXXX.select 'ici tu sélectionnes autre chose
    end sub


    sincèrement

###raw>template_hook.ano_emploi###