这是我的方法,我正在尝试自动刷新我的标签。当我将我的标签作为点击事件时...答案刷新并且是正确的。
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();
}
任何帮助表示赞赏!我一直在键盘上敲打一天。
答案 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!";
}
}