2009-07-03 36 views
3

我正在创建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;

有人可以帮我吗?

在此先感谢!

+1

检查按钮的父元素的启用状态 – rahul 2009-07-03 06:52:27

+0

在赋值obj.btnRtn.Enabled = true之后立即打另一个断点;然后检查状态。如果它返回false,则任何一个父项都不启用。 – rahul 2009-07-03 06:53:51

回答

1

我强烈怀疑要么单击处理程序不被称为你不看着你以为你是形式。

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

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

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

  • 检查你正在寻找正确的按钮。更改文本并启用它。
  • 检查其容器是否已启用,正如phoenix所建议的。不仅仅是它的直接父母,而且一路上涨。
  • 检查你的UI线程之后还在做什么 - 是否由于某种原因阻止了它?其他用户界面是否在这一点上工作?
+0

感谢您的及时回复。 我刚刚添加了断点,我发现这些语句正在执行,但仍然没有启用该按钮。 我该怎么办? 我怎样才能达到理想的任务? 请有人帮助我! – sheetal 2009-07-03 05:35:02

1

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

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

正如前面的提示所述,使用断点(F9)和调试器来查看执行事件时是否曾经调用过该方法。如果未被调用,那么问题可能不是启用属性,而是方法的连线,以便在事件发生时调用它。

这里的一个参考:

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

+0

感谢您的及时回复。我只是添加了断点,我发现语句被执行,但是按钮没有被启用。 我该怎么做才能完成所需的任务? 请帮我一把! – sheetal 2009-07-03 05:39:04

1

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

+0

没有按钮未放置在任何面板控件或容器中 – sheetal 2009-07-03 09:52:10

0

只是一个预感。可能是'锁'属性的按钮是'真'

+0

锁定的属性与按钮的启用状态无关。它只是指定按钮是否可以移动或调整大小。 – rahul 2009-07-03 06:37:35

+0

否按钮未锁定。我的意思是该按钮的锁定属性设置为false。 – sheetal 2009-07-03 06:51:00

2

你没有提到你在哪里obj(这是frmRb的实例)show。因为这是非常重要的一点。从你的编码看来,看起来frmRb已经可见了。所以你永远叫

obj.Show() ; 

,而不是你叫

obj.BringToFront(); 

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

frmRb obj = new frmrb(); 

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

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();     
     } 

我希望这是有帮助的ü解决乌尔问题。

1

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

,看看有没有什么帮助你调试

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,因此它们匹配。

1

如果正常显示,你正试图在屏幕上显示的形式,可能是你可以试试这个:

  1. 创建,将设置按钮属性启用=真形式的公共方法;
  2. 创建窗体并显示后,您可以调用该公共方法;

frmRb obj = new frmrb(); obj。EnableButton

0

PL检查btnRtn情况,如果btnRtn是面板或打开,如果它在面板PL检查面板enabled属性,你的编码是确定

2

SOLUTION 你不应该禁用按钮,或改变它在被初始化之前是可见的,否则你将不能再次启用它,或者将它再次变为可见。 相反,您应该禁用它自己的“初始化”事件,然后它将正常工作! 我有同样的问题。

0

这是一段时间,因为任何人评论或回答我以为我会提出这个答案/评论,因为它可能会有助于其他人绊倒它。

我最近有一些的CheckBoxNumericUpDowns不改变启用状态,但它只是因为他们在一个组框尚未启用的事实。额头拍打我的时刻,但花了我20分钟,找出为什么这些控制没有响应!