按钮启用属性无法正常工作

时间:2009-07-03 04:49:05

标签: c# .net winforms properties button

我正在创建一个Windows应用程序。我有两个按钮。 我编写了以下代码片段。

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;

有人可以帮帮我吗?

先谢谢!!

11 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

你没有提到 obj (这是frmRb的实例)show的地方。因为这是非常重要的一点。 从你的编码看来,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();                
        }

我希望它对你有帮助并解决你的问题。

答案 2 :(得分:1)

我强烈怀疑 点击处理程序未被调用您没有查看您认为自己的表单。

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

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

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

  • 检查您是否正在查看右键。更改其文本以及启用它。
  • 按照phoenix的建议检查其容器是否已启用。不只是直接的父母,而是一路向上。
  • 检查你的UI线程之后还做了什么 - 你是否因某种原因阻止它? UI的其余部分是否在那时工作?

答案 3 :(得分:1)

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

根据谷歌的说法,C#中的等价物是进入Designer.cs文件,查找控件的位置,并手动更改click事件连接以指向新的事件处理程序。

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

以下是参考资料:

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

我会尝试将语句序列切换为: private void btnPd_Click(object sender,EventArgs e)         {obj.btnRtn.Enabled = true;            btnCancel.Enabled = true; }

并查看是否有助于您调试

答案 6 :(得分:1)

您的代码确实应该产生错误... 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所以它们匹配。

答案 7 :(得分:1)

如果您尝试在屏幕上显示的表单已正确显示,则可以尝试此操作:

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

答案 8 :(得分:0)

只是预感。可能是按钮的'已锁定'属性为'true'

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

我最近有一些 CheckBoxes NumericUpDowns 没有更改启用状态,但这只是因为他们在 GroupBox 中没有启用。对我来说是一个额头拍打的时刻,但是花了我20分钟来弄清楚为什么这些控件没有响应!