J'ai créé une boîte de dialogue de recherche non modale pour la recherche dans un RichTextBox et je n'arrive pas à positionner la boîte de dialogue de recherche après la sélection du texte trouvé afin qu'il ne couvre pas le texte sélectionné. J'ai essayé d'obtenir le numéro de ligne par rapport à la zone client en utilisant les éléments suivants:Comment positionner une boîte de dialogue de recherche pour ne pas couvrir le texte trouvé?
this.lineCount = this.rtb.Height/(this.rtb.Font.Height+2);
rtb.Select(rtbIndex, searchText.Length);
int linePos = (this.rtb.GetLineFromCharIndex(this.rtb.GetFirstCharIndexOfCurrentLine())) % this.lineCount;
if(linePos<(this.lineCount/2))
{
this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Bottom - this.Height));
}
else
{
this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Top));
}
this.lineCount est le nombre de lignes qui correspondent dans la zone client en fonction de la hauteur de la police et la hauteur du richtextbox. C'est une valeur précise que j'ai vérifiée. Mon code positionne la boîte de dialogue de recherche en bas de la zone richtext si lineNum est inférieur à la moitié de la valeur de this.lineCount, sinon en haut
Cependant, linePos n'est pas fiable. Il a parfois une valeur de zéro lorsque la ligne avec le texte sélectionné est la 19ème ligne et le lineCount est 20, donc le dialogue est déplacé sur le texte sélectionné. Ainsi, il ne calcule pas de façon fiable où la zone richtext affiche le texte sélectionné.
Vous avez de bonnes réponses, mais ne fermez pas votre fil. Quelque chose d'autre dont tu as besoin? –