【发布时间】:2010-02-12 15:25:42
【问题描述】:
在属性 Enabled 设置为 false 或只读设置为 true 的文本框中显示文本会在灰色文本上产生黑色,这根本不适合阅读。
在 Windows 窗体中很好地显示只读文本的最简单方法是什么?
【问题讨论】:
-
相关帖子 - Make TextBox uneditable
在属性 Enabled 设置为 false 或只读设置为 true 的文本框中显示文本会在灰色文本上产生黑色,这根本不适合阅读。
在 Windows 窗体中很好地显示只读文本的最简单方法是什么?
【问题讨论】:
不能在锁定时覆盖 ForeColor 和 BackColor 属性吗?
如果做不到这一点,请创建自己的文本框类,该类侦听 KeyUp 事件并在 ReadOnly(或 Locked)属性设置为 true 时拦截按键(防止将其添加到文本中。)然后您可以使用任何样式你喜欢。
【讨论】:
BackColor = SystemColors.Window 和 ForeColor = SystemColors.ControlText
嗯... 使用标签? 为什么要使用文本框,并让它看起来不是可编辑的? 你想让用户感到困惑吗? 违反习惯的用户界面风格习语,后果自负。
【讨论】:
这实际上在 Windows 上似乎特别可怕,具体取决于您希望达到的程度(例如,如果您希望文本是可选的,如果您希望能够进行文本格式化)。
我前段时间发现了这一点,但很幸运地发现各种博客上都有详细的记录。看来您可以使用 RichTextBox,但要创建事件处理程序以防止最终用户修改其内容。
例如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 的选项。
我不知道为什么似乎没有更优雅的解决方案,并且欢迎任何知道更好方法的人提供意见。
【讨论】: