【问题标题】:VisualC# Cannot Change DisplayName of ControlVisualC# 无法更改控件的显示名称
【发布时间】: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框架,很难告诉你如何解决。

标签: c# .net


【解决方案1】:

MessageBoxes 暂停当前线程的执行。因此,当您首先显示 MessageBox 时,不会点击第二行,因此不会更新字符串

【讨论】:

  • 我关闭了消息框,之后什么也没发生
【解决方案2】:

尝试添加显示名称作为表单加载的参数。默认情况下,表单具有 sender 和 e 作为参数,但您也可以随时添加自己的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2019-05-19
    • 2016-05-01
    相关资源
    最近更新 更多