2008-11-09 63 views

回答

49

注意:請參閱下面的Cheetah的答案,因爲它標識了獲得此解決方案的先決條件。設置TextBoxBackColor


我覺得你真的想要做的是使TextBoxReadOnly屬性設置爲true

更改禁用TextBox中文本的顏色有點棘手。我想你可能需要繼承和重寫OnPaint事件。

ReadOnly雖然應該給你與!Enabled相同的結果,並允許你保持對TextBox的顏色和格式的控制。我認爲它也將支持從TextBox中選擇和複製文本,這對於禁用TextBox是不可能的。

另一個簡單的選擇是使用Label而不是TextBox

+1

它也適用於這種方式。謝謝! – 2008-11-09 18:02:07

+0

如果這是你的答案繼續前進,並單擊我的支票:) – 2008-11-10 02:58:52

+0

這不是一個確切的答案,但它是一個公平的選擇;) – 2008-11-10 12:53:34

50

此外,爲了在標記爲ReadOnly的TextBox上遵守ForeColor,您必須明確地設置BackColor。如果你想讓它仍然使用默認的BackColor,你必須明確設置,因爲設計師太聰明瞭,不適合自己的需要。將BackColor設置爲其當前值就足夠了。我這樣做的Load事件的形式,像這樣:

private void FormFoo_Load(...) { 
    txtFoo.BackColor = txtFoo.BackColor; 
} 
5

喜 從代碼側設置只讀屬性爲true或從設計時的運行時間不

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info; 
txtFingerPrints.ReadOnly = true; 
1

你可以嘗試這個。 重寫TextBox的OnPaint事件。

protected override void OnPaint(PaintEventArgs e) 
{ 
    SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property 
    // Draw string to screen. 
    e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property 
} 

設置的ControlStyles爲 「UserPaint」

public MyTextBox()//constructor 
{ 
    // This call is required by the Windows.Forms Form Designer. 
    this.SetStyle(ControlStyles.UserPaint,true); 

    InitializeComponent(); 

    // TODO: Add any initialization after the InitForm call 
} 

Refrence

或者你可以嘗試這種破解

在Enter事件將焦點設置

int index=this.Controls.IndexOf(this.textBox1); 

this.Controls[index-1].Focus(); 

因此,您的控件不會集中並且表現得像禁用。

0

如果你想顯示不能被編輯或選擇,你可以簡單地通過@ spoon16和@Cheetah使用標籤

0

除了答案的文本,我總是tabstop屬性設置爲False的文本框防止默認選擇文本。

或者,你也可以做這樣的事情:

private void FormFoo_Load(...) { 
    txtFoo.Select(0, 0); 
} 

private void FormFoo_Load(...) { 
    txtFoo.SelectionLength = 0; 
} 
4

我只是發現這樣做的一個很好的方式。在我的例子我使用一個RichTextBox但它應該與任何控制工作:

public class DisabledRichTextBox : System.Windows.Forms.RichTextBox 
{ 
    // See: http://wiki.winehq.org/List_Of_Windows_Messages 

    private const int WM_SETFOCUS = 0x07; 
    private const int WM_ENABLE  = 0x0A; 
    private const int WM_SETCURSOR = 0x20; 

    protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR)) 
      base.WndProc(ref m); 
    } 
} 

您可以安全地設置啓用=真,只讀=假,它會像一個標籤,防止焦點,用戶輸入,光標改變,而不被實際禁用。

看看它是否適合你。 問候

1

只是處理啓用更改並將其設置爲顏色,你需要從獵豹

private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e) 
{ 
    ((TextBox)sender).ForeColor = Color.Black; 
}