在c#中创建通用的LostFocus事件处理程序

时间:2010-08-01 15:45:19

标签: c# event-handling

情况如下:

http://i962.photobucket.com/albums/ae103/kashyaprakesh/misc/denominationwindow.jpg

我有左边的文本框,接受面额值,右边的其他文本框给出了例如的总值。在1000的标签的左侧文本框中,如果我将值设为5然后向右,则值为5000。

我使用lostFocus事件处理程序来执行此操作,但是是否有必要为每个文本框执行丢失焦点事件处理程序?肯定会有另一种方式。

 private void textBox6_Leave(object sender, EventArgs e)
 {
        MessageBox.Show(e.ToString());
        if (textBox6.Text == "")
        {
            string y = "0";
            textBox6.Text = y;
            textBox8.Text = y;
        }
        else
        {
            textBox8.Text = populateTotalAmount(textBox6.Text, 1000);

        }
        textBox8.ReadOnly = true;
    }

    private string populateTotalAmount(string denominations, int value)
    {
        int totalVal = Int32.Parse(denominations) * value;
        return totalVal.ToString();
    }

我想创建一个适用于LostFocus事件的通用事件处理程序,我还需要传递不同的值(即500,100等等) 这样我就可以使用该值发送它populateTotalAmount函数。

3 个答案:

答案 0 :(得分:1)

没有令人信服的理由不只是简单地迭代文本框并计算结果。这段代码在人类时间运行,她无法区分微秒和毫秒之间的差异。

现在,您可以为所有文本框提供一个 Leave事件处理程序。 TextChanged也会起作用,但是让人迷失方向。

答案 1 :(得分:0)

假设您使用的是WinForms,您可以创建一个自定义控件,将乘法值作为属性,然后将该控件添加到表单中。

答案 2 :(得分:0)

这样的东西(尚未测试过)

foreach (Control ctrl in Controls)
{
   if (ctrl is TextBox && ctrl.Name.StartsWith("math"))
      ctrl.Focused += OnFocus;
}