两个相关属性ReadOnly和Enabled。 ReadOnly = true可以防止编辑灰色背景,但仍然可以实现焦点。 Enabled = false灰色背景,文本并防止编辑或聚焦。 Windows用户界面约定为用户提供了一个视觉提示,表明控件是只读的(这样他们就不会试图编辑它并随后受挫)。灰色禁用状态是已定义的系统约定,但它可以提供太多的提示(而不是足够可信的)。
最简单的路线是probababy将您的控件设置为ReadOnly,将背景设置为System.Drawing.SystemColors.Window,然后阻止焦点消息。您可以通过捕获OnEnter事件并立即将Focus移动到另一个不是只读的控件(例如Close或Edit按钮)来实现此目的。或者你可以派生你自己的控制并吃任何WM_SETFOCUS消息。下面的例子。
我相信各种第三方控制集为您提供了额外的选项和粒度。
public class ReadOnlyTextBox : TextBox
{
const uint WM_SETFOCUS = 0x0007;
public ReadOnlyTextBox()
{
this.ReadOnly = true;
this.BackColor = System.Drawing.SystemColors.Window;
this.ForeColor = System.Drawing.SystemColors.WindowText;
}
protected override void WndProc(ref Message m)
{
// eat all setfocus messages, pass rest to base
if (m.Msg != WM_SETFOCUS)
base.WndProc(ref m);
}
}
>我想控制看起来很正常。我只想指出,拥有与可编辑控件相同的只读控件是一种可怕的UI体验。 – FlySwat 2008-11-01 19:08:17
注意点。这是一个假的/测试的应用程序,只是演示了一些东西..我认为用户体验神将让我活下去:) – Gishu 2008-11-01 19:11:15