【问题标题】:Using form elements to interact with UserControls使用表单元素与 UserControls 交互
【发布时间】:2017-01-05 20:06:41
【问题描述】:

我在用户控件上有一个按钮,默认情况下未启用。当表单上发生事件时,我希望它能够启用按钮。我在主窗体上设置了一个按钮来测试它,它似乎将 UC 按钮设置为启用,但它在应用程序中似乎没有启用。

public partial class Form1 : Form
{

    public Login ucLogin = new Login();

    private void button1_Click(object sender, EventArgs e)
    {
        if (ucLogin.loginEnabled)
        {
            MessageBox.Show("True");
        }
        else
        {
            MessageBox.Show("False");
            ucLogin.loginEnabled = true;
        }


    }
}

Form.cs

在登录表单的用户控件中:

public partial class Login : UserControl
{
    public bool loginEnabled
    {
        get { return ucBtn.Enabled; }
        set { ucBtn.Enabled = value; }
    }
}

奇怪的是,如果我点击Form button1,它会说“False”,如果我再次点击它,它会说“True”,说明它确实改变了UC的值按钮,但在应用程序上,它仍然处于禁用状态。

【问题讨论】:

  • 在更改ucBtn.Enabled的值后尝试调用Application.DoEvents()
  • @FelixD。 blogs.msdn.microsoft.com/jfoscoding/2005/08/06/… 请不要只建议 Application.DoEvents 而不提及危险
  • @Steve 这在我看来像是一个“初学者问题”(无意冒犯),所以我保持简单。
  • @FelixD。仍然。应该警告某人可能会产生严重后果的事情。就像你永远不应该教初学者用字符串连接构造 Sql
  • @Steve 是的。你是对的 - 我的错。所以谢谢你指出来!

标签: c# winforms events user-controls


【解决方案1】:

您在表单上看到的Login 用户控件可能不是您设置loginEnabled 属性的实例。

【讨论】:

  • 是的,你是对的。我在 Form.cs 中实例化了一个新实例,而不是引用已经放置在表单上的实例。 login1.loginEnabled 是这样做的正确方法:)
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多