查看问题
我创建了一个方法,在鼠标失去焦点后将TextBox
的输入转换为TitleCase。我现在将它封装成一个单独的静态类,“Utillity”,以及我在项目中广泛使用的所有其他商务逻辑。我的问题是,因为封装我的方法似乎不想将任何数据返回给WinForm。在调试之后,我发现该值实际上被传递给'Uttility'类,然后被转换,但是当它被传回时,该值与转换前的值相同。
Utillity Class中的方法
public static bool ToTitle(string s)
{
var regex = new Regex(@"[^a-zA-Z0-9\s]"); // regex to change user input into Title Case.
if (!string.IsNullOrEmpty(s) || (!s.Any(char.IsDigit)))
// validate that the input is not a char or or null
{
s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
//MessageBox.Show("Please enter a valid value, no special chars or leaving this blank!!!!");
return false;
}
else
{ return true; }
}
验证类的代码。
private void txt_SurName_Validating(object sender, CancelEventArgs e)
{
try
{
Utillity.ToTitle(txt_SurName.Text);
txt_SurName.Focus();
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString()); }
}
我认为问题在于,因为TextBox
中存在所有数据,所以它假设没有任何事情发生,并且var's'保留在Utillity类中,而不是更加顺利地传回。我有它工作如果somone可以帮助我会非常感激。
我能让它发挥作用的唯一方法是强制转换每个Validating Event
,如下所示,我知道这是非常糟糕的做法:
txt_SurName.Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(txt_SurName.Text.ToLower());
因为所有这一切都是在WinForm类中转换它,使'Utillity'类冗余。
答案 0 :(得分:0)
private void txt_SurName_Validating(object sender, CancelEventArgs e)
{
try
{
// You need to assign the changed text back to the control!
txt_SurName.Text = Utillity.ToTitle(txt_SurName.Text);
txt_SurName.Focus();
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString()); }
}