Détection d'un événement de collage dans une zone de texte enrichi
Est-il un moyen par lequel nous pouvons trouver si une carte de clip coller événement s'est produit dans une zone de texte enrichi? Cet événement seront utilisés dans le but de faire certaines choses, avec l'collé bloc de texte.
grâce
Voici mon code
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_PASTE)
{
OnPasteOccurred();
MessageBox.Show("Pas");
}
if (m.Msg == 0x000F)
{
if (PaintControl)
{
base.WndProc(ref m);
}
else
{
m.Result = IntPtr.Zero;
}
}
else
{
base.WndProc(ref m);
}
}
Modifier
Je souhaite faire certains de la syntaxe ou indentation sur sur la pâte les événements, quelque chose qui ce l'éditeur de code semble faire très efficacement. Je ne sais pas comment il le fait. Aurait besoin d'aide dans ce sens particulier. Je suis assez sûr qu'il doit y certains Win32 natif de code ou quelque chose comme ça peut être intercepté. J'ai essayé de traquer les clés, les événements de souris et c'est pas joli.
source d'informationauteur redDragonzz
Vous devez vous connecter pour publier un commentaire.
C'est un peu difficile à détecter une opération de collage dans le
RichTextBox
.Première solution peut être de détecter la
WM_PASTE
message substitution de laWndProc
mais, malheureusement, la commande n'envoyez pas ce message à lui-même lorsqu'il effectue une opération de collage.Naïf de détection
Pour détecter les événements de clavier peut fonctionner (vous devez remplacer la
OnKeyDown
fonction) puis vérifiez si les combinaisons de touches (CTRL+V et MAJ+INS). Quelque chose comme ceci:Il fonctionne bien, mais vous ne pouvez pas attraper la pâte opération faite à l'aide de la souris (clic droit pour ouvrir le menu contextuel) et de la pâte d'opérations effectuées à l'aide de drag & drop. Si vous n'avez pas besoin, vous pouvez utiliser cette solution (au moins, c'est tout simplement et simple).
Meilleure détection
Hypothèse: lorsque l'utilisateur tape dans l'
RichTextBox
il insère un caractère à la fois. Comment pouvez-vous l'utiliser? Eh bien, si vous constatez un changement plus grand vous avez détecté une opération de collage, car l'utilisateur ne peut pas taper plus d'une fois des caractères en fonction du temps (ok, vous pouvez dire, que c'est pas toujours vrai, car de l'Unicode des substituts). Voir aussi VB.NET version et plus de détails sur Unicode choses.Veuillez noter que vous ne pouvez pas (à cause de la façon dont différents Ime travail) utilisation
OnKeyDown
(ou similaire). Cela ne fonctionne bien que pour les langues occidentales, mais il a des problèmes avec l'Unicode des trucs (parce que, par exemple,String.Length
propriété peut être augmenté par deuxChar
lorsque l'utilisateur a tapé un caractère unique. Voir aussi ce post pour beaucoup plus de détails à ce sujet (bien qu'il est fortement suggéré la lecture, même si - dans ce cas vous ne vous inquiétez pas à ce sujet). Dans ce post, vous trouverez également le code pour un meilleur algorithme pour déterminer la longueur de la chaîne. En bref, vous avez à remplacer::
Après tous ces efforts, vous pouvez vous apercevoir que...l'utilisateur peut même coller un caractère unique et il peut passer inaperçue. Vous avez raison, c'est pourquoi ce est un meilleure détection au lieu d'un solution parfaite.
Solution parfaite
La solution parfaite (si vous êtes en cours d'exécution sur Windows 8) bien sûr il existe, le natif de contrôle rich edit envoie un
EN_CLIPFORMAT
message de notification. Il est destiné à informer un contrôle rich edit de la fenêtre parent d'une pâte produite avec un format de presse-papiers. Vous pouvez ensuite remplacer leWndProc
de son parent pour détecter laWM_NOTIFY
message pour cette notification. De toute façon c'est pas en quelques lignes de code, cochez cette Article MSDN pour plus de détails.À partir de .Net 3.0, il y a une méthode intégrée pour détecter la pâte événement:
Suffit d'appeler cette méthode dans le constructeur. Si vous voulez par exemple poignée de la pâte vous-même, comme si l'utilisateur a entré le texte manuellement, vous pouvez utiliser