2010-05-19 64 views
1

我擴展了MaskedTextBox組件來添加一些功能。擴展MaskedTextBox的文本屬性綁定到DateTime?屬性,綁定格式設置爲「HH:mm:ss」(即24小時)的時間格式。所以這個蒙面的文本框會一次捕獲顯示。用數據綁定寫空/無值

我添加的額外功能是使組件只讀,除非組件被雙擊或按下輸入按鈕(如果組件被鎖定/只讀,控件的背面顏色有助於通知用戶) 。當按下輸入按鈕時,我也暫停綁定,以便綁定的數據更新,用戶輸入不會丟失。然後信息被寫回到值,並且當用戶再次按下回車鍵時恢復數據綁定。

這一切工作良好,直到在這裏,值和書面顯示,如預期。

不過,我也希望當按下Enter鍵時提交新寫的nullnothing價值的DateTime?財產,如果用戶沒有輸入任何文字(或無效的文本,但我們只要堅持,沒有文字)值。

不像與在MaskedTextBox其他有效的條目,如果我有沒有文字進入當我執行:

 Me.DataBindings("Text").WriteValue() 

(「鎖定」的MaskedTextBox時),它然後跳轉到綁定的屬性獲取方法,我進入調試器中的每一行代碼(而不是Set方法與其他有效條目)

如何在無文本「」時將此空/無/「」值寫入DateTime?屬性恩特紅色變成MaskedTextBox

感謝您的幫助!

回答

1

爲了操縱綁定控件中顯示的值並保存在綁定屬性中,需要處理綁定的格式和分析事件。看下面一個簡單的示例代碼:

maskedTextBox1.DataBindings.Add("Text", bindobj, "Time"); 
maskedTextBox1.DataBindings[0].Parse += new ConvertEventHandler(Form1_Parse); 
maskedTextBox1.DataBindings[0].Format += new ConvertEventHandler(Form1_Format); 

void Form1_Format(object sender, ConvertEventArgs e) 
{ 
    if (e.Value == null) 
     e.Value = "Null"; 
} 
private void Form1_Parse(object sender, ConvertEventArgs e) 
{ 
    DateTime d; 

    if (DateTime.TryParse(e.Value.ToString(), out d)) 
     e.Value = d; 
    else 
     e.Value = null; 
} 
private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
     maskedTextBox1.DataBindings[0].WriteValue(); 
} 
+0

如何在VB.Net項目中做到這一點? – gicalle 2015-09-16 14:46:18