【问题标题】:C# the visible property of a control is not changing on eventC#控件的可见属性在事件中没有改变
【发布时间】:2022-06-30 06:23:24
【问题描述】:

我有一个带有组合框的 Winform,其中包含“是”或“否”选项,这是我的事件代码:

    private void cmbYesNo_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox cmb = sender as ComboBox;
        if (cmb.Text == "Yes")
        {
            this.button1.Visible = true;
        }
        else
        {
            this.button1.Visible = false;
        }
    }

调试代码,它确实正确地进入了我想要设置可见属性的正确语句,但它并没有在表单上进行物理更改。我错过了什么?

【问题讨论】:

  • 您是否在代码中的其他任何地方使用“this.button1.Visible”?
  • 该表单中还有其他按钮吗?
  • 在调试的时候,设置了 visible 后,是否检查了属性是否也确实发生了变化?
  • 更新,完全相同的代码在新的干净表单上运行良好,我拥有它的表单有很多控件,包括表格和许多面板。好像有一些父控件不允许这些更改 - 这可能吗?
  • @GuidoG - 是的,我可以在调试窗口中看到更改,但表格上没有

标签: c# winforms properties controls


【解决方案1】:

这曾经让我发疯。

您可以做的是使用BeginInvoke 发布该消息,这允许ComboBox 在尝试使用该值之前完成其所有待处理消息的处理。试试这个,看看它是否能解决您的问题:

private void cmbYesNo_SelectedIndexChanged(object sender, EventArgs e)
{
    BeginInvoke((MethodInvoker)delegate
    {
        button.Visible = comboBox.Text == "Yes";
    });
}

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2011-12-06
    • 2010-12-04
    • 2012-06-27
    相关资源
    最近更新 更多