2016-11-08 20 views
-1

我會動態地創建多個文本框以向用戶顯示信息。現在我想設置一些文本框的背景和前景,如果語句爲真。Textbox在禁用前景時會丟失前景色

所有這一切都很好,直到我禁用文本框,現在forecolor「重置」到標準顏色,而不是顯示我想要的。

DataTable dt = [some data] 
//Col 0: ID 
//Col 1: some text 
//Col 2: date 

for (int i = 0; i < dt.Rows.Count; i++) 
{ 

    DateTime d = (DateTime) dt.Rows[i].ItemArray[2]; 
    TextBox txt = new TextBox(); 
    txt.Multiline = true; 
    txt.Font = tb_Aufloesung.Font; 
    txt.Text = dt.Rows[i].ItemArray[1].ToString() + "\n" + d.ToString(@"dd.MM.yyyy"); 
    txt.Size = new Size((TextRenderer.MeasureText(dt.Rows[i].ItemArray[1].ToString(), txt.Font).Width) + 10, 34); 
    txt.Location = new Point(43, 3 + split.Panel2.Controls.Count/2 * 40); 

    if(d <= DateTime.Now) { 
     txt.BackColor = Color.Red; 
     txt.ForeColor = Color.White; 
    }  

    //txt.Enabled = false; 

    split.Panel2.Controls.Add(txt); 
} 

這是怎樣的文本框的樣子,當我使用上面的代碼:

  1. 註釋的行 - >//txt.Enabled = false;
  2. 取消對該行 - >txt.Enabled = false;

enter image description here

我不知道爲什麼在th在第二種情況下,紅色文本框的前景不是白色,因爲它應該是。 任何人有任何想法?

+0

相反,您可以將其「ReadOnly」屬性設置爲true。 –

+0

那麼'ReadOnly'並不是我搜索的解決方案。 @Sinatr是對的,重複。 – FatTony

+0

[請參閱此處以獲取類似示例](http://stackoverflow.com/questions/40416262/change-label-text-on-its-own-click-event-during-runtime/40418144#40418144) - 您將使用EnabledChanged事件。 – TaW

回答

0

這就是文本框的工作原理 - 它們是爲了輸入而不是顯示。爲什麼不使用標籤?

+0

Becaus在其他一些地方可能有一個用戶輸入需要,但直到那麼文本框應該被禁用。 – FatTony