IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

[UserControl]Gérer l'évènement KeyDown d'un contrôle qui ne peut avoir le focus


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [UserControl]Gérer l'évènement KeyDown d'un contrôle qui ne peut avoir le focus
    Bonjour cher forum,

    Toujours occupé sur mon usercontrol, je désire simuler le clic du bouton delete lors de la pression de la touche delete.

    Rien de bien compliqué à priori.

    Sauf que...

    Le contrôle dont je voudrais gérer le KeyDown est une PictureBox (donc pas de KeyDown car une PictureBox ne peux avoir le focus).
    Pas de propriété KeyPreview sur un UserControl.
    Impossible de passer par le KeyPreview de la winform sur laquelle il sera inséré car il se sera bien sûr pas le seul contrôle sur la winform et que je n'arrive pas à lui donner le focus bien que CanFocus = True.

    Je fais donc appelle à vos lumières afin d'éclairer ma lanterne.

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Je suppose que tu auras plusieurs UserControl de type PictureBox sur ta forme et que tu veux pouvoir supprimer un UserControl après l'avoir sélectionné en appuyant sur la touche Supprimer (?)

    Si c'est le cas, ce que je ferais, c'est de simuler un focus lors du clic sur le UserControl. Pour cela, le UserControl pourrai générer un Event indiquant à la Forme qu'il est sélectionné (et éventuellement utiliser ControlPaint.DrawFocusRectangle dans le paint du UserControl pour qu'il paraisse sélectionné). Ensuite, c'est au niveau de la forme que tu gères la suppression par la touche Suppr. Si un UserControl est sélectionné, il est supprimé.

    eb.

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Bonjour,

    Je suppose que tu auras plusieurs UserControl de type PictureBox sur ta forme et que tu veux pouvoir supprimer un UserControl après l'avoir sélectionné en appuyant sur la touche Supprimer (?)

    Si c'est le cas, ce que je ferais, c'est de simuler un focus lors du clic sur le UserControl. Pour cela, le UserControl pourrai générer un Event indiquant à la Forme qu'il est sélectionné (et éventuellement utiliser ControlPaint.DrawFocusRectangle dans le paint du UserControl pour qu'il paraisse sélectionné). Ensuite, c'est au niveau de la forme que tu gères la suppression par la touche Suppr. Si un UserControl est sélectionné, il est supprimé.

    eb.
    Je n'avais pas vu ton message en répondant à Ezekiel.

    J'explique en détail pourquoi je veux faire cela alors... Mais vu qu'un petit dessin vaut mieux qu'un long discours, voici une image (voir pièce jointe (j'espère que ce sera suffisamment grand pour être clair^^)).

    Voici donc à quoi ressemble mon contrôle. Alors bien sûr, ici il est tout seul sur une form en Dock=Fill car je ne fais que le tester mais il faut penser que plus tard, il s'intégra dans une interface plus complexe avec d'autres contrôles sur la form.

    Alors, qu'est-ce qu'il fait ce contrôle... D'abord, il reçoit des données via sa propriété DataSource et affiche ce qu'il doit dans la partie gauche (le datagridview). Ensuite, s'il y a des lignes dans le DGV, l'utilisateur peut choisir une catégorie dans le bas via les radiobuttons et délimite ensuite des ranges sur le schéma (qui est une picturebox où il dessine directement).

    On voit donc ici que

    • arnaud travaille de 9h15 à 17 avec une pause de 11h15 à 11h30 et une autre pause de 15h00 à 15h15.
    • ruben travaille de 10h15 à 17h30 avec une pause de 12h45 à 13h00 et une autre pause de 15h00 à 15h15.
    • luk travaille de 10h30 à 16h avec une pause de 12h15 à 13h00.

    L'utilisateur peut également passer en mode sélection en cliquant sur le radiobutton ayant "Selection" comme texte. Il peut alors sélectionner une range du diagramme en cliquant dessus. Laquelle est alors encadrée en bleu.


    S'il désire pour une raison X ou Y la supprimer, il lui suffit alors de cliquer sur le bon Delete.

    Je voudrais permettre que cette suppression s'effectue également lorsque l'utilisateur presse la touche Delete de son clavier.
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Ok, effectivement, je n'avais pas du tout compris ce que tu voulais faire !
    Je ne connais pas vraiment ta cinématique mais je viens de tester un truc qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
      PictureBox1.Focus()
    End Sub
     
    Private Sub PictureBox1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles PictureBox1.PreviewKeyDown
      If e.KeyCode = Keys.Delete Then
         MessageBox.Show("Delete")
      End If
    End Sub
    En espérant que ça collera pour toi...
    eb.

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Ok, effectivement, je n'avais pas du tout compris ce que tu voulais faire !
    Je ne connais pas vraiment ta cinématique mais je viens de tester un truc qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
      PictureBox1.Focus()
    End Sub
     
    Private Sub PictureBox1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles PictureBox1.PreviewKeyDown
      If e.KeyCode = Keys.Delete Then
         MessageBox.Show("Delete")
      End If
    End Sub
    En espérant que ça collera pour toi...
    eb.
    Ah bin je vais tester... J'y avais pensé mais pas tester car d'après la MSDN, une picture ne peux pas avoir le focus ^^.

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Bon bin je confirme que cela ne fonctionne pas...

    J'ai ajouté exactement ton code et rien ne se passe... (j'ai même ajouter l'event click de la picturebox pcq je le faisais dans le mouseclick qui présentait l'avantage de déjà être géré par mon controle)

  7. #7
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Excepté la notion de simuler le click qui est simple, c'est l'histoire de KeyPress que je ne saisis pas ...

    Tu veux qu'un keypress de la touche Del sur ton userControl génère le click, c'est pas bien compliqué jusque là ... Mais y'a l'air d'avoir une spécificité dans ce que tu dis qui va tout compliquer mais j'ai pas compris.

  8. #8
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Que le keypress génère le clic, c'est hyper simple en temps normal oui.

    Mais pour te faire comprendre le problème, fais l'exercice suivant :

    1. Crée un projet winform
    2. Sur la winform de ton projet, ajoute une picturebox
    3. Tente de gérer le keypress (ou keydown ou autre) de la picturebox

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/05/2012, 11h42
  2. Gérer les évènements sur un UserControl
    Par wheelshot dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2009, 16h52
  3. Réponses: 1
    Dernier message: 07/07/2008, 14h56
  4. Réponses: 3
    Dernier message: 15/02/2007, 13h04
  5. gérer l'évènement Click du contrôle Image
    Par naruto01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/01/2007, 19h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo