C#WPF如何使用object sender的value清除调用代码的input-box中的value
C# WPF how to use value of object sender to clear value in the input-box which has evoked the code
我正在创建一个带有几个输入文本字段的 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”,但这是不可能的(我真的不知道为什么)。
简而言之:我想知道是否可以检索例如“txtBarauslagen.Text”或对象“txtBarauslagen”(=我的输入文本字段)的值来自“对象发送者”。
由于发件人应该是引发该事件的 TextBox
,只需将其转换为 TextBox
即可访问其 Text
属性.
TextBox tb = (TextBox)sender;
顺便说一句,如果我是你,我会改用double.TryParse
方法。
这是修改后的代码,可以正常使用,谢谢
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
}
}
}
}
我正在创建一个带有几个输入文本字段的 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”,但这是不可能的(我真的不知道为什么)。
简而言之:我想知道是否可以检索例如“txtBarauslagen.Text”或对象“txtBarauslagen”(=我的输入文本字段)的值来自“对象发送者”。
由于发件人应该是引发该事件的 TextBox
,只需将其转换为 TextBox
即可访问其 Text
属性.
TextBox tb = (TextBox)sender;
顺便说一句,如果我是你,我会改用double.TryParse
方法。
这是修改后的代码,可以正常使用,谢谢
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
}
}
}
}