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
Version imprimable
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
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
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.
google caret coordinates c# ca donne quelque chose ?
(c# et vb.net sont compatibles et convertibles, mais plus de sources sur c#)
C'est peut être un début
Si la ligne cliqué est différente de la précédente alors on repositionne la listboxCode:
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
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
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
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
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é parCode:TextBox1.hwnd
Mais et surtout, la manière dont les fonction de l'API sont déclarés ne va pas.Code:TextBox1.Handle.ToInt32
Apparemment il faut faire un Import :
Et les déclarations ressemblent à cela :Code:Imports System.Runtime.InteropServices
Et ça marcheCode:
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
Magnifique merci beaucoup, ça marche
Code:
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