C# 如何将textbox格式化方法应用于所有textbox控件
好的,我正在尝试为我表单上的所有文本框应用会计编号格式 现在,我在这里做了一些研究,发现这篇文章将帮助我设定目标 然后我找到了另一篇文章,在表单上应用所有文本框的格式,而不向所有控件单独添加代码 问题是,上的代码使用控件名,这将把它绑定到单个textbox控件。我尝试了控件名(TextoBox),但也失败了C# 如何将textbox格式化方法应用于所有textbox控件,c#,textbox,windows-forms-designer,masking,C#,Textbox,Windows Forms Designer,Masking,好的,我正在尝试为我表单上的所有文本框应用会计编号格式 现在,我在这里做了一些研究,发现这篇文章将帮助我设定目标 然后我找到了另一篇文章,在表单上应用所有文本框的格式,而不向所有控件单独添加代码 问题是,上的代码使用控件名,这将把它绑定到单个textbox控件。我尝试了控件名(TextoBox),但也失败了 还有另外一个问题要考虑,即使我设法克服了上面的问题,代码也是一个事件,它是以控件名命名的,所以如果我把它应用到一个类或方法并调用它,我认为它不会起作用。 虽然我已经有了我想要的解决方案,但我
还有另外一个问题要考虑,即使我设法克服了上面的问题,代码也是一个事件,它是以控件名命名的,所以如果我把它应用到一个类或方法并调用它,我认为它不会起作用。 虽然我已经有了我想要的解决方案,但我想知道是否有一种更快的方法来应用它,这不会给我的代码增加太多行。努力学习如何让事情更容易阅读,多做少做。有什么建议吗
谢谢你的阅读。听起来你已经拥有了所有的部分,只是需要帮助才能把它们组合起来。对于ControlName,您可以将sender对象强制转换为控件并访问其Name属性
void SetProperty(Control ctr)
{
foreach (Control control in ctr.Controls)
{
if (control is TextBox)
{
control.Leave += control_Leave;
}
else
{
if (control.HasChildren)
{
SetProperty(control);
}
}
}
}
void control_Leave(object sender, EventArgs e)
{
var textBox = sender as TextBox;
Double value;
if (Double.TryParse(textBox.Text, out value))
textBox.Text = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C2}", value);
else
textBox.Text = String.Empty;
}
用法:
SetProperty(this);
此外,从我对OP的评论来看:如果会计真的很重要,我建议使用十进制而不是双精度。Double会更快,但Decimal更精确。找出哪些权衡是有意义的,并据此做出决定
按评论编辑:
myTextBox.Leave -= control_Leave
如果您知道控件的名称,则上述操作将起作用。在使用SetProperty(this)之后,需要执行此操作。如果要在SetProperty()方法中处理此问题,请检查control.Name==“myTextBox”。您可以将多个控件事件(使用相同参数)订阅到同一事件处理程序:
public YourFormConstructor()
{
foreach(var textbox in form.Controls.OfType<TextBox>())
textbox.Leave += FormatCurrencyText;
}
private void FormatCurrencyText(object sender, EventArgs e)
{
var textbox = sender as TextBox;
Double value;
if (Double.TryParse(textbox.Text, out value))
textbox.Text = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C2}", value);
else
textbox.Text = String.Empty;
}
publicYourFormConstructor()
{
foreach(form.Controls.OfType()中的var textbox)
textbox.Leave+=FormatCurrencyText;
}
私有void FormatCurrencyText(对象发送方,事件参数e)
{
var textbox=发送方作为textbox;
双重价值;
if(Double.TryParse(textbox.Text,out值))
textbox.Text=String.Format(System.Globalization.CultureInfo.CurrentCulture,“{0:C2}”,值);
其他的
textbox.Text=String.Empty;
}
如果会计真的很重要,我建议使用十进制而不是双精度。Double会更快,但Decimal更精确。找出哪种权衡是有意义的,并据此做出决定。它非常有效!非常感谢你帮了我的忙!现在,快速提问,如果我想要一个没有格式设置的文本框控件怎么办?我尝试了:Mytextbox.Text=String.Format(“{0}”,txbTrackingID.Text);我在MSDN上的CurrentCulture上找到了上面的一些变体和一些其他信息,但没有成功。你需要一些方法来专门识别这个文本框,并以不同的方式处理它。如果您知道该控件,则可以解除偶数处理程序的挂钩。请参阅我的编辑。