【发布时间】:2015-09-21 22:25:18
【问题描述】:
所以我是从 GUI 的另一个页面制作标签的显示名称(内容)。在意识到公共静态 void 函数不能更改 Displayname 因为它不是静态的之后,我搞砸了事件并设置了一个处理程序,以便在其他页面发布事件时运行。
看起来像这样
public void UpdateEventHandler(object sender, System.EventArgs e)
{
System.Windows.Forms.MessageBox.Show("Event Received");
tab1.DisplayName = Globals.tab1Name;
}
当事件结束时,会弹出消息框,但 DisplayName 不会更改。 没有错误,什么都没有。
问题不是Globals.tab1Name,因为我通过 MessageBox 运行了它,它很好。
所以我在与标签相同的页面上制作了另一个按钮:
private void Button_Click(object sender, RoutedEventArgs e)
{
tab1.DisplayName = Globals.tab1Name;
System.Windows.Forms.MessageBox.Show("clicked");
}
这一次所有代码都正常工作了,标签改变了,msgbox 弹出了。
我用相同的两行代码创建了另一个函数,用事件处理程序调用它,再次只有 msgbox 工作。但是,当我使用按钮调用相同的函数时,一切正常。
任何帮助都会很棒,在此先感谢。
【问题讨论】:
-
这是 WinForms 还是 WPF?我没有看到
Label控件的任何DisplayName属性。 -
您的事件是否在 UI 线程中引发?显然,如果没有,您应该会收到错误消息,但也许您在其他地方使用
try / catch语句隐藏消息。 -
这可能是一个跨线程问题,但是不知道你使用的UI框架,很难告诉你如何解决。