自动刷新标签作为文本框将文本输入数据转换为方法

时间:2013-11-18 04:45:52

标签: c# winforms textchanged

这是我的方法,我正在尝试自动刷新我的标签。当我将我的标签作为点击事件时...答案刷新并且是正确的。

private void Calculate()
{
    dblUtil1 = Tinseth.Bigness(dblSG) * Tinseth.BTFactor(dblBT1);
    double UtilRounded1 = Math.Round(dblUtil1 * 100);
    strUtil1 = UtilRounded1.ToString() + "%";
}

以下是在我的文本框中更改文本时不会更新的Validated标签事件。

private void lblUtil1_Validated(object sender, EventArgs e)
{
    Calculate();
}

如果这是正确的......我错过了什么?我需要在文本框上做些什么来触发验证吗?

我还尝试了一个产生错误的文本更改事件,无法将类型void(或任何类型)隐式转换为EventHandler。这是代码。

private void lblUtil1_TextChanged(object sender, EventArgs e)
{
    lblUtil1.TextChanged += Calculate();
}

任何帮助表示赞赏!我一直在键盘上敲打一天。

3 个答案:

答案 0 :(得分:0)

尝试拨打yourlabelname.Refresh(),例如

private void lblUtil1_TextChanged(object sender, EventArgs e)
{
    lblUtil1.TextChanged = Calculate();
    lblUtil1.Refresh();

}

  private void lblUtil1_TextChanged(object sender, EventArgs e)
    {
        Calculate();
        lblUtil1.Refresh();

    }

答案 1 :(得分:0)

你需要做几件事。

首先,停止使用“匈牙利语”表示法。这不好。这有很多原因,这很糟糕。 MS甚至说,“不要使用匈牙利语”,因为大多数人都错了,因为你的代码显示了。而是适当地命名您的变量。例如,dblSG绝对没有意义。

其次,请从昨天(https://stackoverflow.com/a/20026642/2424)重读迈克尔对你问题的回答。他没有说要使用lblUtil1_Validated。他说要用TextBox_Validated。换句话说,您应该运行计算的事件是表单上的文本框字段。他还建议您只使用文本框TextChanged事件,以使计算在键入时运行。就个人而言,我不同意这一点,无论如何。

第三种可能的选择是简单地回到原始解决方案。意思是,只需在单击标签时运行计算。在这种情况下,你应该回答你原来的问题,因为迈克尔未能回答它。

答案 2 :(得分:0)

首先,您必须处理输入要计算的值的 TextBox 的事件,例如在TextBox中更改vale或验证它时。

因此,如果您有 textBox1 ,那么您应该进行此处理(当textBox1中的值更改时触发)

 private void textBox1_TextChanged(object sender, EventArgs e)
 {
     lblUtil1.Text = Calculate();
 }

我假设您要在标签 lblUtil1 strUtil1 中显示值,因此您必须更改计算方法,如下所示< / p>

 private string Calculate()
 {
    dblUtil1 = Tinseth.Bigness(dblSG) * Tinseth.BTFactor(dblBT1);
    double UtilRounded1 = Math.Round(dblUtil1 * 100);
    strUtil1 = UtilRounded1.ToString() + "%";

    return strUtil1;
 }

<强> EDITED

这是验证所需TextBox的示例代码。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (textBox1.Text == "") 
    {
        e.Cancel = true;
        lblUtil1.Text = "textBox1 is required!";
    }
}