兩個相關屬性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