让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!
在你的代码中,虽然你更新了全局静态变量 PublicValue.result0x03,但 label 的文本并没有自动更新。这是因为 label 的文本值只在页面2加载时被设置一次,之后即使 PublicValue.result0x03 发生变化,label 也不会自动更新。
要解决这个问题,你需要在 PublicValue.result0x03 发生变化时,手动通知页面2更新 label 的文本。你可以通过事件或委托来实现这一点。
解决方案1:使用事件通知页面2更新
- 定义事件:在
PublicValue 类中定义一个事件,当 result0x03 发生变化时触发该事件。
public static class PublicValue
{
public static ushort[] result0x03;
public static event Action DataUpdated;
public static void UpdateResult0x03(ushort[] newData)
{
result0x03 = newData;
DataUpdated?.Invoke();
}
}
- 在页面8中更新数据并触发事件:
PublicValue.UpdateResult0x03(ReadHoldingRegisters());
- **在页面2中订阅事件并更新
label**:
public partial class Page2 : Form
{
public Page2()
{
InitializeComponent();
PublicValue.DataUpdated += UpdateLabel;
}
private void UpdateLabel()
{
if (PublicValue.result0x03 != null)
{
label.Text = PublicValue.result0x03[10].ToString() + " ";
label.Refresh();
}
}
private void Page2_FormClosed(object sender, FormClosedEventArgs e)
{
PublicValue.DataUpdated -= UpdateLabel;
}
}
解决方案2:使用委托
- 定义委托:在
PublicValue 类中定义一个委托,用于通知页面2更新 label。
public static class PublicValue
{
public static ushort[] result0x03;
public static Action UpdateLabel;
public static void UpdateResult0x03(ushort[] newData)
{
result0x03 = newData;
UpdateLabel?.Invoke();
}
}
- 在页面8中更新数据并调用委托:
PublicValue.UpdateResult0x03(ReadHoldingRegisters());
- **在页面2中设置委托并更新
label**:
public partial class Page2 : Form
{
public Page2()
{
InitializeComponent();
PublicValue.UpdateLabel = UpdateLabel;
}
private void UpdateLabel()
{
if (PublicValue.result0x03 != null)
{
label.Text = PublicValue.result0x03[10].ToString() + " ";
label.Refresh();
}
}
private void Page2_FormClosed(object sender, FormClosedEventArgs e)
{
PublicValue.UpdateLabel = null;
}
}
总结
通过使用事件或委托,你可以在 PublicValue.result0x03 发生变化时通知页面2更新 label 的文本。这样,无论 PublicValue.result0x03 如何变化,label 都会自动更新为最新的值。