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 :

Position d'une listBoxe dans un TextBoxe multilines


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut Position d'une listBoxe dans un TextBoxe multilines
    Bonjour
    je voudrez afficher une liste (aide à la saisir) dans un textBoxe multilines a la position du curseur clavier , mais j'arrive pas de le faire.

    merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    une solution possible doit être de faire une classe inherits textbox qui sur keypress voit s'il faut afficher ou non la liste de possibilités
    celle ci dans une fenetre topmost qui gère le lostfocus pour se fermer

    enfin c'est une idée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    une solution possible doit être de faire une classe inherits textbox qui sur keypress voit s'il faut afficher ou non la liste de possibilités
    celle ci dans une fenetre topmostqui gère le lostfocus pour se fermer

    enfin c'est une idée
    merci Pol63 mais est ce qu'il ya pas une solution simple par exemple connaitre les coordonnées en points(x,y) du curseur clavier pour localiser la listBox.

  4. #4
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Citation Envoyé par Hervy Voir le message
    merci Pol63 mais est qu'il ya pas une solution simple par exemple connaitre les coordonnées en points(x,y) du curseur clavier pour localiser la listBox.
    Mais... trouver les coordonnées du curseur, ça il faudra le faire quoiqu'il arrive... facile, c'est les coordonnées du curseur

    Pol63 parlait juste de comment créer ce textbox au style Intellisense.
    Et les trucs dont il parle (lost focus, top most, héritage tec.) c'est pour simuler le comportement que tu cherches.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Mais... trouver les coordonnées du curseur, ça il faudra le faire quoiqu'il arrive... facile, c'est les coordonnées du curseur

    Pol63 parlait juste de comment créer ce textbox au style Intellisense.
    Et les trucs dont il parle (lost focus, top most, héritage tec.) c'est pour simuler le comportement que tu cherches.
    trouver les coordonnées du curseur, ça il faudra le faire quoiqu'il arrive... facile
    Comment ???????

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    google caret coordinates c# ca donne quelque chose ?

    (c# et vb.net sont compatibles et convertibles, mais plus de sources sur c#)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    C'est peut être un début


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim Position_Cursor As Integer
        Dim Old_Position_Cursor As Integer
     
        Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
     
            Position_Cursor = TextBox1.GetLineFromCharIndex(TextBox1.GetFirstCharIndexOfCurrentLine)
     
            If Old_Position_Cursor <> Position_Cursor Then
                listbox.Location = New Point(Cursor.Position.X,Cursor.Position.Y) 
            End If
     
            Old_Position_Cursor = TextBox1.GetLineFromCharIndex(TextBox1.GetFirstCharIndexOfCurrentLine)
        End Sub
    Si la ligne cliqué est différente de la précédente alors on repositionne la listbox

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par gnain Voir le message
    C'est peut être un début


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim Position_Cursor As Integer
        Dim Old_Position_Cursor As Integer
     
        Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
     
            Position_Cursor = TextBox1.GetLineFromCharIndex(TextBox1.GetFirstCharIndexOfCurrentLine)
     
            If Old_Position_Cursor <> Position_Cursor Then
                listbox.Location = New Point(Cursor.Position.X,Cursor.Position.Y) 
            End If
     
            Old_Position_Cursor = TextBox1.GetLineFromCharIndex(TextBox1.GetFirstCharIndexOfCurrentLine)
        End Sub
    Si la ligne cliqué est différente de la précédente alors on repositionne la listbox
    je n'ai pas besoin des coordonées de la souris , mais je veux celles du curseur clavier.

    merci pour votre colaboration

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut Reformulation
    peut etre j'ai mal formulé la question,

    j'ai placée un textBoxe multilines et une listBoxe masquée, mon objectif est d'afficher la liste au coordonnées du curseur clavier lorsque j'appuyé sur CTR+C

  10. #10
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Comme te l'a informé Pol63, curseur clavier se dit Caret en anglais (ils font la distinction entre la souris et le clavier)
    Petite recherche Google "MSDN get Caret Position" :

    - pour un textbox :
    TextBox.CaretIndex
    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

    -Pour un RichTextBox :
    RichTextBox.CaretPosition
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  11. #11
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Oups, ça donne juste l'index...

    Cela dit, avec cette info on peut quand même avoir la position en coordonnées en utilisant l'API User32 :

    http://forums.codeguru.com/showthrea...x-mdi-app-help
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Oups, ça donne juste l'index...

    Cela dit, avec cette info on peut quand même avoir la position en coordonnées en utilisant l'API User32 :

    http://forums.codeguru.com/showthrea...x-mdi-app-help
    Merci , c'est ça ce que j'ai voulu mais un petit pblm la proprieté whnd n'a pas reconue vs 2012

    l'exemple c'est très ancien 1999 il pose beaucoup pbms

  13. #13
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Je chercher un peu, mais ce qu'il y a de sur c'est qu'en effet le code est obsolète.

    Déjà

    doit être remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TextBox1.Handle.ToInt32
    Mais et surtout, la manière dont les fonction de l'API sont déclarés ne va pas.

    Apparemment il faut faire un Import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Imports System.Runtime.InteropServices
    Et les déclarations ressemblent à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <DllImport("user32.dll")> _
        Private Shared Function GetCaretPos(ByRef lpPoint As Point) As Long
        End Function
     
        <DllImport("user32.dll")> _
        Private Shared Function ClientToScreen(ByVal hWnd As IntPtr, ByRef lpPoint As Point) As Boolean
        End Function
    Et ça marche
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Je chercher un peu, mais ce qu'il y a de sur c'est qu'en effet le code est obsolète.

    Déjà

    doit être remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TextBox1.Handle.ToInt32
    Mais et surtout, la manière dont les fonction de l'API sont déclarés ne va pas.

    Apparemment il faut faire un Import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Imports System.Runtime.InteropServices
    Et les déclarations ressemblent à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <DllImport("user32.dll")> _
        Private Shared Function GetCaretPos(ByRef lpPoint As Point) As Long
        End Function
     
        <DllImport("user32.dll")> _
        Private Shared Function ClientToScreen(ByVal hWnd As IntPtr, ByRef lpPoint As Point) As Boolean
        End Function
    Et ça marche
    Magnifique merci beaucoup, ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub ConsultFrm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
            If e.Control And e.KeyCode = Keys.C Then 'Controle + C 
                Dim tCaret As Point
                Call GetCaretPos(tCaret) 'get the Caret Position in RichTextbox Coords
                Call ClientToScreen(MotifTxt.Handle.ToInt32, tCaret) 'get the Coords in Screen Coords
                MsgBox(tCaret.X & "---" & tCaret.Y)
            End If
        End Sub

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

Discussions similaires

  1. Position d'une occurence dans une chaine
    Par Maglight dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2005, 10h08
  2. Position d'une DIV dans IE
    Par Klaim dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/05/2005, 13h34
  3. Position d'une ScrollBar dans un TRichEdit (ou TMemo)
    Par Troll dans le forum C++Builder
    Réponses: 9
    Dernier message: 24/02/2005, 15h18
  4. Position d'une balise dans un document externe
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 18/07/2003, 02h56
  5. [VB6] Position d'une MDIchild dans un MDI
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/01/2003, 14h02

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