Esto parece realmente excepcionalmente horrible de hacer en Windows, dependiendo del grado al que desee ir (por ejemplo, si desea que el texto sea seleccionable o no, si desea poder formatear texto).
Descubrí esto hace algún tiempo pero tuve la suerte de encontrar que el horror estaba razonablemente bien documentado en varios blogs. Parece que puede usar un RichTextBox, pero crea controladores de eventos para evitar que los usuarios finales modifiquen sus contenidos.
p. Ej. RichTextBox llamado "myRichTextBox" entonces usted desea añadir lo siguiente a los Designer.cs de la forma:
this.myRichTextBox.SelectionChanged += new System.EventHandler(this.MyRichTextBox_Deselect);
this.myRichTextBox.DoubleClick += new System.EventHandler(this.MyRichTextBox_Deselect);
this.myRichTextBox.GotFocus += new System.EventHandler(this.MyRichTextBox_Deselect);
this.myRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.MyRichTextBox_LinkClicked);
Y entonces lo que desea crear métodos como los siguientes en su formulario:
public void MyRichTextBox_Deselect(object sender, EventArgs e)
{
// When user tries to select text in the rich text box,
// set selection to nothing and set focus somewhere else.
RichTextBox richTextBox = sender as RichTextBox;
richTextBox.SelectionLength = 0;
richTextBox.SelectionStart = richTextBox.Text.Length;
// In this case I use an instance of separator bar on the form to switch focus to.
// You could equally set focus to some other element, but take care not to
// impede accessibility or visibly highlight something like a label inadvertently.
// It seems like there should be a way to drop focus, perhaps to the Window, but
// haven't found a better approach. Feedback very welcome.
mySeperatorBar.Focus();
}
public void MyRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
{
System.Diagnostics.Process.Start(e.LinkText);
}
Obviamente, puede que no te importe el controlador LinkClickedEventHandler(), pero estoy seguro de que querer esa funcionalidad es bastante común, dado que el control RichTextBox tiene la opción de identificar y colorizar automáticamente las URL.
No tengo idea de por qué no parece haber una solución más elegante y agradecería la opinión de cualquiera que conozca un mejor enfoque.
Acabo de probar esto, y sí, después de establecer la propiedad ReadOnly en True, puede volver a establecer BackColor en blanco. –
Gracias - ¡eso fue rápido! –
Vi esto publicado en alguna parte como una solución a este problema, y funcionó principalmente para mí, pero por alguna razón tuve un problema con él en la práctica. Tal vez para hacer con la accesibilidad? Si recuerdo, voy a actualizar con por qué no hice esta ruta (si funciona para usted, está bien, supongo :-). –