c# - 无法更改事件的表单标签
问题描述
我有两个静态标签,它们应该显示我保留在后端的用户计数器,但它们不会在表单上更改。我已经尝试寻找答案,但我无法理解其中的大部分。
//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;
我已经尝试了上述方法,但标签仍然没有改变
解决方案
感谢您花时间分享您的问题。
您似乎误解了什么是类、变量、方法和事件,以及如何使用它们。
也就是说,如果我了解您想要做什么,这可能会解决您的问题。
当您通过代码更改 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 中拥有一份好工作和好生活。
推荐阅读
- api - 分页计数器
- c - 使用 makefile 生成库:没有生成目标的规则
- php - Bootstrap 不适用于通过 php 自动生成的卡片
- vb.net - 如何在有多行时从文本文件中读取文本并生成一个字符串,以便我可以将其用作 sqlconnection 字符串?
- python - Plotly Dash - 模式匹配回调无法正常工作
- javascript - 未捕获的类型错误:无法在 HTMLDivElement 处读取 null 的属性“classList”。
- jquery - 如何向 jQuery 验证器函数添加附加参数
- python - 对输入使用列表并查看它是否包含列表中的任何内容
- r - 从非常大的对列表中提取单链接集群
- php - 使控制器更薄。拉拉维尔 8