我有两个静态标签,该标签应该向用户显示我在后端保留的计数器,但是它们在表单上没有更改。我已经尝试过寻找答案,但是我大部分都无法理解。
//Watchers
private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
{
CDCreated += 1;
}
private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
{
LPCreated += 1;
}
以上是我的计数器上升的事件
下面是我尝试创建以更改标签的事件。
private void cdCounterLbl_TextChanged(object sender, EventArgs e)
{
cdCounterLBL.Text = CDCreated.ToString();
}
private void lpCounterLbl_TextChanged(object sender, EventArgs e)
{
lpCounterLBL.Text = Convert.ToString(LPCreated);
}
我正在尝试
cdCounterLBL.TextChanged += cdCounterLbl_TextChanged;
lpCounterLBL.TextChanged += lpCounterLbl_TextChanged;
我已经尝试了上述方法,但标签仍然没有改变
答案 0 :(得分:0)
感谢您抽出宝贵的时间来分享您的问题。
似乎您误解了类,变量,方法和事件之类的东西,以及如何使用它们。
这可能会帮助您:How do I improve my knowledge in C#。
话虽如此,如果我了解您想做什么,那可能会解决您的问题。
通过代码更改Text属性时,会引发TextChanged(用于标签)。
不是因为您更改了计数器的值,标签才会引发某些事件。
计数器和标签是两个独立的事物,完全不同且不相关,没有链接,但是您可以按以下方式链接:
private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
{
CDCreated += 1;
cdCounterLbl_TextChanged(this, null);
}
private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
{
LPCreated += 1;
lpCounterLbl_TextChanged(this, null);
}
private void cdCounterLbl_TextChanged(object sender, EventArgs e)
{
cdCounterLBL.Text = CDCreated.ToString();
}
private void lpCounterLbl_TextChanged(object sender, EventArgs e)
{
lpCounterLBL.Text = LPCreated.ToString();
}
因此由于静态方法而无法正常工作,并且由于调用TextChanged更改文本而导致设计不良。
这里是怎么做。
添加静态事件:
private static Action CountersUpdated;
添加表单的Load事件:
CountersUpdated += DoUpdateCounters;
在表单的FormClosed事件中:
CountersUpdated -= DoUpdateCounters;
使用:
private void DoUpdateCounters()
{
cdCounterLBL.Text = CDCreated.ToString();
lpCounterLBL.Text = LPCreated.ToString();
}
现在您可以写:
private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
{
CDCreated++;
CallCountersUpdated();
}
private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
{
LPCreated++;
CallCountersUpdated();
}
private static void CallCountersUpdated()
{
if ( CountersUpdated != null ) CountersUpdated();
}
您还可以为CDCounterUpdated和LPCounterUpdated生成两个事件,而不是一个CountersUpdated。
在C#和OOP中拥有良好的工作和美好的生活。