2016-12-20 3 views
0

Un élément RichTextBox placé sur un formulaire présente un bug dans lequel le défilement horizontal vers la droite avec la souris (bouton central de défilement horizontal ou pavé tactile) continue indéfiniment et ne s'arrête jamais. C'est le cas même si le RichTextBox ne contient qu'un seul mot qui entre facilement dans ses limites et les barres de défilement sont désactivées.WinForms RichTextBox bogue de défilement horizontal infini

J'ai rencontré ce bug depuis .NET 2.0 et supposé qu'il serait corrigé à un moment donné, mais je le vois encore sur Windows 10 avec .NET 4.6. Ce qui m'intéresse, c'est que je ne trouve aucune référence à ceci ici sur SO ou ailleurs sur Internet. Est-ce que quelqu'un a déjà rencontré ce problème auparavant et est-ce que quelqu'un sait comment éviter ce comportement étrange?

Répondre

0

Cela semble provenir de .NET en utilisant une ancienne version du contrôle d'édition riche Win32 qui n'a pas été mis à jour depuis plus d'une décennie.

La solution a consisté à remplacer la version du contrôle éditeur de texte qui est créé en remplaçant la propriété CreateParams et en spécifiant une version plus récente à la place:

public partial class BetterRichTextBox : RichTextBox 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    static extern IntPtr LoadLibrary(string lpFileName); 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      LoadLibrary("MsftEdit.dll"); 

      //Use newer versions of the RTF control 
      //Fixes a lot of bugs, such as http://stackoverflow.com/q/41233421/17027 
      //A list of versions and their DLL paths can be found at https://github.com/dpradov/keynote-nf/issues/530 
      CreateParams createParams = base.CreateParams; 
      createParams.ClassName = "RichEdit50W"; 

      return createParams; 
     } 
    } 
}