2010-09-09 13 views
7

Mam formant RichTextBox na aplikacji i oto mój problem: gdy aplikacja działa, jeśli zacznę wybierać za pomocą myszy niektóre znaki wewnątrz słowa i kontynuować wybieranie poza nim, wybór automatycznie obejmuje całe słowo, w którym rozpocząłem selekcję i inne słowa, z których chcę wybrać tylko część, słowo ms-owskie, jeśli się nie mylę.C# Problem wyboru RichTextBox

np

  • tekst brzmi: "Jeszcze jeden foobar"
  • co chcę wybrać to: "Wystarczy ano [Ther foo] bar" (rzeczą pomiędzy [])
  • to, co jest faktycznie zaznaczone: "Po prostu [kolejny foobar]"

Problem polega tylko na tym, że wybieram mysz, jeśli wybiorę tekst za pomocą klawiatury, to działa dobrze. Ponadto właściwość automatycznego wyboru słowa kontrolki jest wyłączona. Każdy pomysł, dlaczego tak jest?

+0

Hrm. Czy to naprawiono? http://connect.microsoft.com/VisualStudio/feedback/details/115441/richtextboxs-autowordselection-property-does-not-work-correct –

+0

Hmm ... Myślę, że to wszystko. Masz pojęcie o obejściu? – cantrem

Odpowiedz

13

Istnieje głupi błąd w implementacji właściwości AutoWordSelection. Sposób obejścia jest równie głupi. Dodaj nową klasę do swojego projektu i wklej poniższy kod. Skompilować. Upuść nową kontrolę z góry przybornika na formularz, zastępując istniejący RTB.

using System; 
using System.Windows.Forms; 

public class FixedRichTextBox : RichTextBox { 
    protected override void OnHandleCreated(EventArgs e) { 
     base.OnHandleCreated(e); 
     if (!base.AutoWordSelection) { 
      base.AutoWordSelection = true; 
      base.AutoWordSelection = false; 
     } 
    } 
} 

Wyszedłem adnotacji w dolnej części tej MSDN Library page ze szczegółami błędu.

+0

To było kompletnie kiepskie ... ale dzięki, spróbuję jak najszybciej. W końcu dostaję niektóre błędy .net! – cantrem

+0

... i rzeczywiście działa. Dzięki jeszcze raz! – cantrem

+0

Mam nagrodę za pytanie dotyczące błędu RichTextBox: http://stackoverflow.com/questions/19256004/richtextbox-selection-bug-when-pressing-control-key czy masz jakiś pomysł? –

2

Może sytuacja się zmieniła, ponieważ kwestia ta została wysłuchana, ale mam jeszcze prostsze rozwiązanie:

Wystarczy dodać richTextBox1.AutoWordSelection = false; do kodu.

Brzmi jak szalony, ale ustawienie go na false w oknie właściwości nie działa. Musisz to zrobić w kodzie, nawet jeśli właściwość jest już fałszywa. To działa!