在文本框中显示将属性Enabled
设置为false或只读设置为true的文本会在灰色文本上生成黑色,这根本不适合阅读。
在Windows窗体中显示只读文本的最简单方法是什么?
答案 0 :(得分:7)
当它被锁定时,你不能覆盖ForeColor和BackColor属性吗?
如果失败,请创建自己的文本框类,该类监听KeyUp事件并在ReadOnly(或Locked)属性设置为true时拦截按键(防止将其添加到文本中)。然后您可以使用任何样式你喜欢。
答案 1 :(得分:0)
...嗯 使用标签? 为什么要使用文本框,并使其看起来不可编辑? 你想让用户感到困惑吗? 违反习惯用户界面风格习语会自担风险。
答案 2 :(得分:0)
这在Windows上看起来实际上是非常可怕的,具体取决于您希望转到的程度(例如,如果您希望文本可以选择,如果您希望能够进行文本格式化)。
我前段时间发现了这一点,但幸运的是发现恐怖在各种博客上得到了充分的记录。您似乎可以使用RichTextBox,但创建事件处理程序以防止最终用户修改其内容。
e.g。 RichTextBox名为“myRichTextBox”,然后您需要将以下内容添加到Designer.cs中:
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);
然后你想在你的表单中创建如下的方法:
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);
}
显然你可能不关心LinkClickedEventHandler()处理程序,但我确信这个功能很常见,因为RichTextBox控件可以选择自动识别和着色URL。
我不知道为什么似乎没有更优雅的解决方案,并欢迎任何知道更好方法的人提供意见。