Cela semble vraiment unique horrible à faire sur Windows, en fonction du degré auquel vous voulez aller (par exemple si vous voulez que le texte soit sélectionnable ou non, si vous voulez être en mesure de faire du texte).
J'ai découvert cela il y a quelque temps mais j'ai eu la chance de trouver l'horreur raisonnablement bien documentée sur différents blogs. Il semble que vous pouvez utiliser un RichTextBox, mais créer des gestionnaires d'événements pour empêcher les utilisateurs finaux de modifier son contenu.
par exemple. RichTextBox appelé « myRichTextBox » alors vous voulez ajouter ce qui suit aux Designer.cs pour la forme:
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);
Et alors vous voulez créer des méthodes telles que les éléments suivants dans votre formulaire:
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);
}
Évidemment, vous ne vous souciez peut-être pas du gestionnaire LinkClickedEventHandler(), mais je suis sûr que cette fonctionnalité est assez courante, étant donné que le contrôle RichTextBox a la possibilité d'identifier et de colorier automatiquement les URL. Je n'ai aucune idée pourquoi il n'y a pas de solution plus élégante et je serais ravi de recevoir les commentaires de ceux qui connaissent une meilleure approche.
Vous venez d'essayer ceci, et oui, après avoir défini la propriété ReadOnly sur True, vous pouvez en effet rétablir BackColor en blanc. –
Merci - c'était rapide! –
J'ai vu cela posté quelque part comme une solution à ce problème, et cela a surtout fonctionné pour moi, mais pour une raison quelconque, j'ai eu un problème avec lui en pratique. Peut-être faire avec l'accessibilité? Si je me souviens je vais mettre à jour avec pourquoi je ne suis pas allé dans cette voie (si cela fonctionne pour vous, c'est bien si je suppose :-). –