无法将转换后的值检索到TextBox WinForm c#

时间:2017-06-02 10:04:20

标签: c# .net winforms

查看问题

我创建了一个方法,在鼠标失去焦点后将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.TextInf‌​‌​o.ToTitleCase(s.ToLow‌​er());

                //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.TextInf‌​‌​o.ToTitleCase(txt_SurName.Text.ToLow‌​er());

因为所有这一切都是在WinForm类中转换它,使'Utillity'类冗余。

1 个答案:

答案 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()); }
    }