c#在失去焦点时将文本框格式化为货币

时间:2012-11-05 03:54:55

标签: c# winforms

我在表单上有几个文本框列表,每个文本框都代表一个数据库列。我希望每次用户退出其中一个方框时更新表单以获取价格。这个列表的名称是priceBox []。我知道lostFocus事件,但我似乎无法找到一种方法让它为一个集合工作,这个列表可以增长,所以我不能有一个固定的数字。我还没有任何代码。如果它有助于文本框控件包含在名为panel1的面板中。

我试过搜索,无法找到任何相关信息。仅适用于单个实例,例如更新1个文本框。

抱歉,如果这是重复但我确实尝试搜索。我也是c#的新手。

感谢。

1 个答案:

答案 0 :(得分:4)

一种方法是向面板添加ControlAdded处理程序,因此每次添加新文本框时,它都会自动为其添加LostFocus处理程序。下面一步一步:

对于您的面板,您绑定一个处理程序ControlAdded事件,类似于:

private void Panel1_ControlAdded(object sender, ControlEventArgs e)
{
    var tb = e.Control as TextBox;
    if (tb != null)
    {
        tb.LostFocus += new EventHandler(TextBox_LostFocus);
    }
}

然后在TextBox_LostFocus中,你可以添加你想要的任何逻辑

void TextBox_LostFocus(object sender, EventArgs e)
{
    var tb = sender as TextBox;
    if (tb != null)
    {
        // modify tb.Text here, possibly like this...
        tb.Text = String.Format("{0:C}", Decimal.Parse(tb.Text));
    }
}

更新所有现有控件(未测试)

foreach (TextBox in panel1.Controls)
{
    tb.LostFocus += new EventHandler(TextBox_LostFocus);
}