2010-02-12 15 views

Antwort

7

Können Sie die ForeColor- und BackColor-Eigenschaften nicht überschreiben, wenn sie gesperrt sind?

Wenn dies nicht der Fall ist, erstellen Sie eine eigene Textboxklasse, die das KeyUp-Ereignis überwacht und den Tastendruck abfängt, wenn die ReadOnly (oder Locked) -Eigenschaft auf true gesetzt ist (verhindert, dass sie dem Text hinzugefügt wird) Stile, die dir gefallen.

+2

Probieren Sie dies aus, und ja, nachdem Sie die ReadOnly-Eigenschaft auf True festgelegt haben, können Sie die BackColor tatsächlich wieder auf weiß setzen. –

+0

Danke - das war schnell! –

+0

Ich sah dies irgendwo als eine Lösung für dieses Problem geschrieben, und es hat meistens für mich funktioniert, aber aus irgendeinem Grund hatte ich ein Problem damit in der Praxis. Vielleicht mit Barrierefreiheit zu tun? Wenn ich mich erinnere, werde ich mit dem Grund aktualisieren, warum ich diese Route nicht gegangen bin (wenn es für dich funktioniert, ist das in Ordnung, obwohl ich denke :-). –

0

Ummm ... Verwenden Sie ein Label? Warum möchten Sie ein Textfeld verwenden, damit es bearbeitet werden kann, wenn nicht? Möchten Sie, dass die Benutzer verwirrt werden? Verletzung der üblichen Benutzerschnittstellen-Stil-Idiome auf eigene Gefahr.

+0

Ich möchte eine Menge Text anzeigen, der von woanders abgerufen/generiert wurde. Und ich möchte es lesbar darstellen (wie der Text auf dieser Website). Und ich will es mit Bildlaufleisten, wenn es über eine Seite geht. –

+1

Mithilfe einer TextBox kann der Benutzer den zu kopierenden Text auswählen. Konvention schreibt vor, dass schwarzer Text auf einem grauen Hintergrund nur gelesen wird, aber es ist nicht ungewöhnlich, dass Standardtextbereiche (schwarzer Text auf weißem Hintergrund) auch nur gelesen werden. –

0

Dies scheint tatsächlich einzigartig schrecklich auf Windows zu tun, abhängig von der Grad zu wünschen, dass Sie gehen möchten (z. B. wenn Sie möchten Text auswählbar sein oder nicht, wenn Sie in der Lage sein, Text zu formatieren).

Ich entdeckte dies vor einiger Zeit, aber war glücklich zu finden, dass der Horror in verschiedenen Blogs einigermaßen gut dokumentiert war. Anscheinend können Sie eine RichTextBox verwenden, aber Ereignishandler erstellen, um zu verhindern, dass Endbenutzer den Inhalt ändern.

z.B. RichTextBox genannt „myRichTextBox“, dann würden Sie die folgenden auf die Designer.cs für das Formular hinzufügen möchten:

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); 

Und dann würden Sie Methoden wie folgt in Ihrem Formular erstellen möchten:

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); 
} 

Offensichtlich interessieren Sie sich nicht für den Handler LinkClickedEventHandler(), aber ich bin sicher, dass diese Funktionalität ziemlich häufig ist, da das RichTextBox-Steuerelement die Option hat, URLs automatisch zu identifizieren und zu färben.

Ich habe keine Ahnung, warum es scheint nicht eine elegantere Lösung zu sein und würde den Input von jedem begrüßen, der von einem besseren Ansatz weiß.

Verwandte Themen