无法在活动中更改表单标签

时间:2019-11-11 02:01:12

标签: c# winforms events

我有两个静态标签,该标签应该向用户显示我在后端保留的计数器,但是它们在表单上没有更改。我已经尝试过寻找答案,但是我大部分都无法理解。

        //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;

我已经尝试了上述方法,但标签仍然没有改变

1 个答案:

答案 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中拥有良好的工作和美好的生活。