Estoy escribiendo una aplicación de formularios para Windows en C# y creo un RichTextBox (a través de código, no del diseñador). Estoy estableciendo la propiedad AutoWordSelection en falso, pero cuando resalto cosas en el cuadro, salta a los límites de las palabras, más un espacio. ¿Es esto un defecto en .NET o lo estoy haciendo mal?RichTextBox.AutoWordSelection roto?
Respuesta
El uso de .NET 3.5 todavía tengo este problema. Esto se informó a Microsoft y se marcó como "Wont Fix" en 2005. Estas son las últimas noticias que puedo encontrar sobre el tema.
Aquí está el informe de error MS conexion: http://connect.microsoft.com/VisualStudio/feedback/details/115441/richtextboxs-autowordselection-property-does-not-work-correctly#details
Aquí está una más reciente 2010 post sobre otra persona que se dio cuenta del problema: http://sonicflare.net/2010/01/10/shipped-bug-feature/#more-192
---------- ACTUALIZACIÓN -------------
He hecho que funcione al colocar AutoWordSelection = False extra en el evento Load del formulario.
public Form1()
{
InitializeComponent();
rich = new RichTextBox();
rich.Size = new Size(150, 50);
rich.Text = "Ignoring a bug for five years does not make it a undocumented feature.";
rich.Location = new Point(20, 20);
rich.AutoWordSelection = false;
this.Controls.Add(rich);
}
private void Form1_Load(object sender, EventArgs e)
{
this.BeginInvoke(new EventHandler(delegate
{
rich.AutoWordSelection = false;
}));
}
El problema es que los cuadros de texto se crean dinámicamente en el programa. Si se puede imaginar, cada vez que un usuario agrega una pestaña a un TabControl que tengo en mi formulario, la pestaña viene equipada con un RichTextBox. ¿Se puede arreglar en este caso? – Nilbert
Quizás intente hacer esto en uno de los eventos de pestañas. Creo que la clave sería establecer la propiedad en un hilo diferente al creado. También tenga en cuenta que, aunque su selección de arrastrar y soltar funciona en mi solución, aún así, al hacer doble clic en una palabra, se selecciona. – Roast
También estoy creando dinámicamente cuadros de texto enriquecidos y tuve el mismo problema de selección. Me tomó un poco de esfuerzo, pero trabajé en torno a ello esencialmente haciendo mi propia rutina de selección. Hay un parpadeo notable cada vez que mi rutina no está de acuerdo con la selección predeterminada del control, pero no es tan malo.
Creé un entero privado que realiza un seguimiento de la posición de inicio de la selección. Es -1 por defecto. Luego implementé un manejador de eventos MouseDown para controlar presionar el botón izquierdo del mouse. Descubre la posición del personaje en el puntero del mouse y si aún no está dentro de la selección actual, establece el entero privado en la posición actual del personaje.
El controlador de eventos MouseMove comprueba que el botón izquierdo del mouse aún está presionado y actualiza las propiedades SelectionStart y SelectionLength del control, de acuerdo con la posición de inicio guardada y la posición actual del carácter. Tenga en cuenta que la posición de inicio siempre es el lado izquierdo de la selección, por lo que sigue al mouse cuando selecciona el texto hacia atrás.
Se vuelve un poco complicado si también se desea admitir el arrastrar y soltar y el margen de selección.
También me encontré con esto, pero con un editor de pestañas con múltiples RTB. En este caso, puede implementar la solución estableciendo la propiedad AutoWordSelection
en False
en el bloque de código que crea RichTextBox. Como tal:
Private Sub CreateNewRTBObject(ByVal items() As String)
Try
For Each s As String In items
If Not FilePaths.Contains(s) Then
rtb = New myRTB(s)
rtb.AutoWordSelection = False
End If
Next
tabs.SetTabWidth()
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Exclamation, title)
End Try
End Sub
Mismo problema aquí con RichTextBox en TabControl. No importa si se creó en Designer o dinámicamente. La solución era, como sugirió Roast en el comentario debajo de su respuesta, usar uno de los eventos de pestañas. Después de establecer allí AutoWordSelection
en False
, el problema volvería intermitentemente al cambiar de pestaña. Lo que solucionó eso fue establecerlo en True
y luego False
en el evento de tabulación.
Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged
RichTextBox1.AutoWordSelection = True
RichTextBox1.AutoWordSelection = False
End Sub
- 1. jekyll con frente roto, ¿cómo encontrar el archivo roto?
- 2. "git pull" roto
- 3. pthread_cond_broadcast roto con dlsym?
- 4. System.IO.Exception: Pipe está roto
- 5. msysgit roto desde 1.7.11?
- 6. Tubo roto (Errno :: EPIPE)
- 7. Procedimiento almacenado roto guardado
- 8. roto Java Mac 10.6
- 9. roto en Implementación ajustada
- 10. Django + WebKit = Tubo roto
- 11. java.net.SocketException: Tubo roto
- 12. Scala Eclipse Autocompletar ¿Roto?
- 13. Webmatrix 2 roto
- 14. Javascript window.navigator.standalone roto
- 15. RubyKoans: koan roto?
- 16. SQL Developer explicar plan roto
- 17. C# - Configuración de usuario roto
- 18. URI de intención estándar roto?
- 19. XCode Sintaxis para colorear Roto
- 20. PyObjC en iPhone (iOS5) roto?
- 21. ¿Está realmente roto el cronómetro?
- 22. Visual Studio Auto-Format Roto
- 23. borde interno css, diseño roto
- 24. WPF One Way Enlace roto
- 25. ¿Este bloqueo doble está roto?
- 26. Es multiprocesamiento.Manager(). Dict(). Setdefault() roto?
- 27. xlocale roto en OS X?
- 28. TypeConverters roto para tipos primitivos?
- 29. Z-index roto en IE8?
- 30. Java Midi en Mac OSX ¿Roto?
¿A qué se refieren exactamente por "saltos a los límites de las palabras"? AutoWordSelection = True le permite al usuario hacer doble clic en una palabra y seleccionarla. Si esto no funciona, publique un fragmento de código y una descripción más detallada de lo que sucede. – Roast
Si coloca el cursor en el medio de una palabra y lo arrastra al medio de otra palabra, debe tener la mitad de ambas palabras seleccionadas. Este no es el caso.Cuando lo arrastra a otra palabra, selecciona la palabra completa más el espacio en el lado derecho de la palabra, no solo los caracteres que arrastra su mouse. Si quiere ver lo que quiero decir, solo haga un richtextbox, escríbalo y trate de resaltar un grupo de palabras y verá que 'saltará' al borde de la palabra más cercana, y no se quedará exactamente con tu mouse – Nilbert