在winforms TextBox中引发OnTextChanged事件

时间:2012-08-23 12:41:10

标签: c# winforms

如何举起一个会为我的文本框控件调用我的OnTextChanged重写方法的事件?

编辑:

private void thebox_TextChanged(object sender, FastColoredTextBoxNS.TextChangedEventArgs e)

3 个答案:

答案 0 :(得分:2)

当您发现需要尝试直接调用事件时,通常表明您正在尝试将大量逻辑填充到事件方法或事件处理程序中。调用OnTextChanged或直接调用事件处理程序不是一个好主意。事件被设计为基于用户交互触发,而不是在您想要查看其副作用时被称为常规方法。事实上,设计目标应该从您的事件方法和所有事件处理程序中删除所有重要的副作用,并将它们移动到单独的方法中。

您最好的选择是采用OnTextChanged方法中当前正在发生的逻辑,并将其放入另一个正确命名的方法中。方法名称“OnTextChanged”表示除了通知您文本已更改之外,它不会执行任何操作。如果你需要做更多的工作,把它放在自己的方法中(例如,UpdateRelatedControls,或者它可能是什么),并从你的OnTextChanged事件中调用这个新方法。然后,您可以公开公开此新方法,并随时调用它。

答案 1 :(得分:1)

从后面的代码中引发该事件的唯一方法是更改​​TextBox的Text属性。

参见http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx enter image description here

答案 2 :(得分:1)

使用逗号textchanged事件将数字格式化为十进制格式。这是c#

中的代码
private void textBox8_TextChanged(object sender, EventArgs e)

    {

        //Remove previous formatting, or the decimal check will fail 

        string value = String.Format("{0:0,0.00}", double.Parse(textBox8.Text));
 // "12,345.87"


        decimal ul;
        //Check we are indeed handling a number 
        if (decimal.TryParse(value, out ul))
        {
            //Unsub the event so we don't enter a loop 
            textBox8.TextChanged -= textBox8_TextChanged;
            //Format the text as currency 
            textBox8.Text = value.ToString();
            textBox8.TextChanged += textBox8_TextChanged;
        }

    }