我正在創建一個帶有一些輸入文本欄位的 WPF 應用程式,如果它只包含數字和逗號,則應檢查輸入(= 必須轉換為雙精度),因此我撰寫了以下代碼
private void txtBarauslagen_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return || e.Key == Key.Tab)
{
string text = txtBarauslagen.Text;
if (text != "") // nur wenn Feld nicht leer
{
try
{
double convtext = double.Parse(text);
MessageBox.Show(convtext.ToString());
// txtNotiz_int.Focus();
}
catch
{
MessageBox.Show("FALSCH - nicht nur Zahlen!");
txtBarauslagen.Text = "";
e.Handled = e.Key == Key.Tab;
}
}
}
}
行“e.Handled = e.Key == Key.Tab;” 是必要的,因為我在“LostFocus”中有代碼,只有在“轉換為雙倍”是可能的情況下才應該執行。
我想知道是否可以更改行“txtBarauslagen.Text = “”;” 這樣就可以重構代碼,以便我可以將相同的代碼用于另一個輸入文本欄位。我已經嘗試在 catch 陳述句中將其更改為“text.Text”,但這是不可能的(我真的不知道為什么)。
簡而言之:我想知道是否可以從“object sender”檢索值,例如“txtBarauslagen.Text”或物件“txtBarauslagen”(=我的輸入文本欄位)。
uj5u.com熱心網友回復:
由于發件人應該是TextBox引發該事件的人,只需將其轉換為TextBox即可訪問其Text屬性。
TextBox tb = (TextBox)sender;
順便說一句,如果我是你,我會用double.TryParse方法代替。
uj5u.com熱心網友回復:
這是修改后的代碼,可以正常運行,謝謝
private void zeit1TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return || e.Key == Key.Tab)
{
TextBox tb = (TextBox)sender;
string TBSender = tb.Text;
double standVal = 0;
if (TBSender != "") // nur wenn Feld nicht leer
{
double.TryParse(TBSender, out standVal);
if (standVal != 0)
{
tb.Text = standVal.ToString();
}
else
{
MessageBox.Show("Nur Eingabe von Zahlen m?glich!");
tb.Text = "";
e.Handled = e.Key == Key.Tab; // verhindert dass Focus weiterspringt
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408328.html
標籤:
