obb*_*rus 0 c# events winforms
我正在寻找一种有效的方法来在提交数据后清除我的winform.目前我使用一个静态方法,它接受一个控件作为参数,然后遍历控件,确定控件的类型,然后清除控件的内容.它工作得很好,但我遇到的问题是控制事件.当我清除控件时,控件事件将触发,并且由于事件中存在数据类型转换(例如int.Parse),因此会导致错误,因为一旦清除控件,将触发控件事件并且空字符串为传递给int.Parse.除了在控件事件中使用一堆if语句或int.TryParse以防止数据转换发生时,是否有更好的方法来清除控件而不是在进程中触发它的事件?
谢谢
以下是我的控件事件和清除方法的示例:
private void Quantity_TextChanged(object sender, EventArgs e)
{
presenter.Quantity = int.Parse(Quantity.Text);
}
public static void ClearForm(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
if (ctrl.GetType() == typeof(TextBox))
{
((TextBox)ctrl).Text = "";
}
if (ctrl.GetType() == typeof(ComboBox))
{
((ComboBox)ctrl).SelectedIndex = 0;
}
if (ctrl.GetType() == typeof(DateTimePicker))
{
DateTimePicker datePicker = ctrl as DateTimePicker;
//datePicker.Format = DateTimePickerFormat.Custom;
datePicker.CustomFormat = "dd-MMM-yyyy";
datePicker.Value = DateTime.Today;
}
if (ctrl.HasChildren)
{
ClearForm(ctrl.Controls);
}
}
}
Run Code Online (Sandbox Code Playgroud)
解决方法1:你只需要Unwire
在EventHandlers
预订的控制清除内容之前
EventHandlers
清理后将背面接线.
解决方案2:
你可以在解析整数之前从函数返回,如果它是EMPTY
:
private void Quantity_TextChanged(object sender, EventArgs e)
{
if(String.IsNullOrWhiteSpace(Quantity.Text))
return;
presenter.Quantity = int.Parse(Quantity.Text);
}
Run Code Online (Sandbox Code Playgroud)
解决方案3:要避免任何无效或EMPTY
值的异常,您可以使用以下int.TryParse()
方法:
来自MSDN: int.TryParse()
将数字的字符串表示形式转换为其等效的32位有符号整数.返回值表示转换是否成功.
private void Quantity_TextChanged(object sender, EventArgs e)
{
int quantity;
if(int.TryParse(Quantity.Text,out quantity))
presenter.Quantity = quantity.ToString();
}
Run Code Online (Sandbox Code Playgroud)