我正在创建一个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;
有人可以帮帮我吗?
先谢谢!!
答案 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的点击处理程序?检查是否仍然正确连接。
然后在处理程序的第一行放置一个断点并在调试器中运行它 - 如果在单击按钮时未点击断点,那就是问题。
编辑:好的,接下来的步骤:答案 3 :(得分:1)
我一直在使用VB而不是C#,但语言非常相似。在VB中,您必须添加“处理SomeButton.Click”以使其处理Click事件。
根据谷歌的说法,C#中的等价物是进入Designer.cs文件,查找控件的位置,并手动更改click事件连接以指向新的事件处理程序。
如上一张海报所述,使用断点(F9)和调试器来查看执行事件时是否曾调用该方法。如果没有调用,则问题可能不在于enabled属性,而在于方法的连接,以便在事件发生时调用它。
以下是参考资料:
答案 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)
如果您尝试在屏幕上显示的表单已正确显示,则可以尝试此操作:
frmRb obj = new frmrb(); obj.EnableButton
答案 8 :(得分:0)
只是预感。可能是按钮的'已锁定'属性为'true'
答案 9 :(得分:0)
如果btnRtn在面板中或打开,请检查btnRtn情况,如果它在面板中pl检查面板启用属性并且编码正常
答案 10 :(得分:0)
已经有一段时间了,因为有人评论或回答我认为我会提出这个答案/评论,因为它可能对其他偶然发现它的人有所帮助。
我最近有一些 CheckBoxes 和 NumericUpDowns 没有更改启用状态,但这只是因为他们在 GroupBox 中没有启用。对我来说是一个额头拍打的时刻,但是花了我20分钟来弄清楚为什么这些控件没有响应!