【问题标题】:Buttons Enabled Property not Working ProperlyButtons Enabled 属性无法正常工作
【发布时间】:2010-11-07 20:19:38
【问题描述】:

我正在创建一个 Windows 应用程序。我有两个按钮。 我写了如下代码sn-p。

frmRb obj = new frmrb();
private void btnPd_Click(object sender, EventArgs e)
        {
           btnCancel.Enabled = true;
           obj.btnRtn.Enabled = true;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
            obj.BringToFront();
            obj.Focus();
        }

以上编码不会产生任何错误。

所有语句都正常工作,但以下语句不能正常工作:

obj.btnRtn.Enabled = true;

不执行。

frmrb 表单被带到前面并集中但 btnRtn 未启用,即语句 obj.btnRtn.Enabled = true;不工作。

默认情况下,我已将 btnRtn Enabled 的属性设置为 false。 请注意 btnRtn 按钮的 Modifier 属性设置为 PUBLIC。

现在我应该如何更改编码以便执行此语句。

obj.btnRtn.Enabled = true;

谁能帮帮我?

提前致谢!!

【问题讨论】:

  • 查看按钮父元素的启用状态
  • 在赋值 obj.btnRtn.Enabled = true; 之后命中另一个断点然后检查状态。如果它返回 false,那么任何一个父级都没有启用。

标签: c# .net winforms properties button


【解决方案1】:

我强烈怀疑要么点击处理程序没有被调用或者您没有查看您认为的表单。

您在哪里为 btnPd_Click 设置点击处理程序?检查它是否仍然正确连接。

然后在处理程序的第一行放置一个断点并在调试器中运行它 - 如果单击按钮时没有命中断点,那就是问题。

编辑:好的,接下来的步骤:

  • 检查您是否正在查看正确的按钮。更改其文本并启用它。
  • 按照 phoenix 的建议,检查其容器是否已启用。不仅是它的直接父级,而且一直向上。
  • 检查您的 UI 线程之后还在做什么 - 您是否出于某种原因阻止它?那时 UI 的其余部分是否正常工作?

【讨论】:

  • 感谢您的及时回复。我刚刚添加了 BreakPoint,我发现这些语句正在执行但仍然没有启用按钮。我该怎么办?我怎样才能达到期望的任务?请有人帮帮我!
【解决方案2】:

我一直在使用 VB 而不是 C#,但语言非常相似。在 VB 中,您必须添加“handles SomeButton.Click”以使其处理 Click 事件。

根据 google,C# 中的等价物是进入 Designer.cs 文件,找到控件所在的位置,然后手动更改 click 事件连接以指向您的新事件处理程序。

如上一张海报所述,使用断点 (F9) 和调试器查看在执行事件时是否曾调用过该方法。如果没有被调用,那么问题可能不在于 enabled 属性,而在于方法的接线,以便在事件发生时调用它。

这是一个参考:

http://www.tek-tips.com/viewthread.cfm?qid=1442702&page=5

【讨论】:

  • 感谢您的及时回复。我刚刚添加了断点,我发现语句已执行但按钮未启用。我应该怎么做才能执行所需的任务?请帮帮我!!
【解决方案3】:

按钮是放置在面板还是任何容器内。如果是,请检查容器的启用状态

【讨论】:

  • 无按钮未放置在任何面板控件或容器内
【解决方案4】:

只是一种预感。可能是按钮的“锁定”属性为“真”

【讨论】:

  • Locked 属性与按钮的启用状态无关。它只是指定按钮是否可以移动或调整大小。
  • 否,按钮未锁定。我的意思是按钮的锁定属性设置为 false。
【解决方案5】:

你没有提到你 obj(这是 frmRb 的实例)显示的地方。因为这是非常重要的一点。 从您的编码看来,frmRb 似乎已经可见。所以你从来没有打电话给

obj.Show() ;

相反,您调用

obj.BringToFront();

所以问题是你从不显示 frmRb 对象。这是你在第一行创建你。每次你写一行

frmRb obj = new frmrb();

创建了 frmrb 的新实例。所以你必须再次显示它,使用 obj.Show() 行; 现在你将你的代码重写为::

frmRb obj = new frmrb();
private void btnPd_Click(object sender, EventArgs e)
        {
           btnCancel.Enabled = true;
           obj.btnRtn.Enabled = true;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
            obj.Show();
            obj.BringToFront();
            obj.Focus();                
        }

希望对你有帮助,解决你的问题。

【讨论】:

  • 您好,感谢您的回复。但是,如果我使用 Show 方法,则在单击第一种形式的按钮之前在 TextBox 中输入的详细信息不会保留。 show 方法再次打开表单,我必须再次重新输入在文本框中输入的值。有什么方法可以暂时隐藏此表单并在 Form2 关闭时保留这些值。请帮帮我!!
  • 有一个很好的答案来防止一次又一次打开表单stackoverflow.com/questions/677056/opening-forms-in-c 要隐藏表单,您可以使用 form_name.hide() 方法并再次显示它使用 formname.show() 例如;在你的上下文中你使用 obj.hide() 然后 obj.show()。
【解决方案6】:

我会尝试将语句序列切换为: 私人无效btnPd_Click(对象发送者,EventArgs e) { obj.btnRtn.Enabled = true; btnCancel.Enabled = true; }

看看是否能帮助你调试

【讨论】:

    【解决方案7】:

    您的代码确实应该产生错误... C# 区分大小写,这意味着 frmRb 与 frmrb 不同。无论如何,我复制了它,创建了 2 个表单和 3 个按钮,并设置了处理程序,它工作正常。

    private void InitializeComponent()
    {
        this.btnPd = new System.Windows.Forms.Button();
        this.btnPd.Location = new System.Drawing.Point(90, 116);
        this.btnPd.Name = "btnPd";
        this.btnPd.Size = new System.Drawing.Size(75, 23);
        this.btnPd.TabIndex = 1;
        this.btnPd.Text = "button1";
        this.btnPd.UseVisualStyleBackColor = true;
        this.btnPd.Click += new System.EventHandler(this.btnPd_Click);
    }
    public System.Windows.Forms.Button btnRtn;
    

    你确定你在处理 btnPd 吗?也许您可能已将启用代码锁定在禁用按钮中?希望这个小的工作示例可以帮助您找到问题。至于其余的代码,我所做的只是将 frmRb 更改为 frmrb,以便它们匹配。

    【讨论】:

      【解决方案8】:

      如果您尝试在屏幕上显示的表单正确显示,您可以试试这个:

      1. 在表单中创建一个公共方法,该方法将设置按钮属性 enabled = true;
      2. 创建表单并显示后,您可以调用该公共方法;

      frmRb obj = new frmrb(); obj.EnableButton

      【讨论】:

        【解决方案9】:

        如果 btnRtn 在面板中或打开,请检查 btnRtn 情况,如果在面板中,请检查面板启用属性并且您的编码正常

        【讨论】:

          【解决方案10】:

          解决方案 在初始化按钮之前,您永远不应该禁用按钮或更改其可见性,否则您将无法再次启用它或再次使其可见。 相反,您应该在它自己的“初始化”事件中禁用它,然后它就会正常工作! 我遇到了同样的问题。

          【讨论】:

            【解决方案11】:

            已经有一段时间没有人发表评论或回答了,我想我会提出这个答案/评论,因为它可能对其他偶然发现它的人有所帮助。

            我最近有一些 CheckBoxesNumericUpDowns 没有改变启用状态,但这仅仅是因为它们位于一个 GroupBox 中未启用。我的额头拍了一下,但我花了 20 分钟才弄清楚为什么这些控件没有响应!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-14
              • 2019-06-03
              • 2021-11-14
              相关资源
              最近更新 更多