【问题标题】:Make the second form enable again after disabled禁用后再次启用第二个表单
【发布时间】:2016-03-07 03:05:14
【问题描述】:

我只是面临一个新问题 我有一个表单,其中有一个按钮,当用户单击此按钮时,另一个表单将出现并打开。 我设置了一个事件,当用户双击第二个表单时,表单将被禁用,并且当表单被禁用时用户无法执行任何操作。 但我想设置一种用户可以再次启用第二个表单的方式。 我尝试了一些事件,当用户在第二个表单上按 Enter 时,第二个表单再次启用,这是我的代码:

f3.Enabled = true;

但事实上,当我在禁用表单后按 Enter 键时,什么也没有发生。 我尝试了另一种方法,例如当用户按下一个键时,第二个表单变为启用,这是我的代码:

f3.Enabled = true;

但是让我很生气的是,当第二个表单打开时,我无法对第一个表单执行任何操作,而我必须先关闭第二个表单。 但是由于禁用的原因,我无法关闭第二种形式。 你有什么建议? 我可以添加什么事件或者我应该在我的程序中添加什么代码才能以这种方式轻松地启用和禁用第二种形式? 提前感谢您的建议。

更新 你能告诉我如何将一些控件放在一个网格中并禁用它们吗? 例如,我不希望该用户进行任何更改,除非通过单击“x”按钮关闭表单。 更新 This is my Form number 3

如您所见,我有 2 个按钮和 3 个标签,我没有在标签中添加代码。 但是我想当用户单击启动时,表单中的所有控件都被禁用(尤其是单击表单:这意味着用户无法像禁用时那样单击表单),但退出按钮除外。并在表单上方的“x”按钮和最小化和最大化按钮变为启用。

更新 我在表格 2 中做了这段代码:

public partial class Form2 : Form{
public Form2()
{
    InitializeComponent();
}

private void Form2_DoubleClick(object sender, EventArgs e)
{
    this.Enabled = false;
}

private void Form2_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        this.Enabled = true;
    }
}

}

并且已经是您在那里编写的代码。 但我还有这个问题。 我放了一张可能对你有帮助的图片。 maybe can help ya this image

更新

我在我的表单中尝试了 KeyPreview 并将其更改为 true,但我还有这个问题。 有什么建议吗? 这意味着我的想法没有代码?!? .更新

我为这个问题尝试了很多代码,但找不到我的答案...... 让我更好地描述我的问题是什么 我有 2 个表单,我想当用户单击第二个表单时,表单变得不可点击,并且当用户单击该按钮时用户无法执行任何操作,除了最小化和最大化并退出表单。 我找到了一些代码,但它们没有帮助我...... 也许你可以:

这是我在按钮中的代码:

        private void btnStart_Click(object sender, EventArgs e)
    {
        f3.Visible = false;
    }

我也试过这段代码:

        private void btnStart_Click(object sender, EventArgs e)
    {
        this.Enabled = false;
    }

还为此表单设置了keypreview,但是当我单击按钮时,表单变为禁用,除了从任务栏关闭程序外,我什么也做不了。 有什么建议吗?

【问题讨论】:

  • 我怀疑您不应该禁用整个表单,而是可能有选择地禁用其上的某个控件子集。如果您禁用表单,那么它将不再引发控制事件。最好禁用部分 UI,但保持表单启用以允许用户仍然能够修改它,否则您将需要从不同的表单重新启用表单。
  • 如果您使用网格并将部分控件放在网格中,那么您所要做的就是禁用该网格。网格内的所有控件也将禁用。但不是整个表格。您可以使用网格外的按钮再次启用网格及其控件。制作开关按钮的提示是使用这个简单的代码f3.Enabled = !f3.Enabled;
  • 你能解释一下我该怎么做吗?我可以禁用期望表单的控件。
  • @VorTex 您能否发布更多代码并说明您希望禁用哪些控件?
  • 一个 WinForm 的 DataGridView,如果这就是你所说的,有一个 ReadOnly 属性。将其设置为 true。

标签: c#


【解决方案1】:

您可以对表单执行以下操作:

表格1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.ShowDialog();
    }
}

Form2:

// on form, set form property KeyPreview to true
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_DoubleClick(object sender, EventArgs e)
    {
        this.Enabled = false;
    }

    private void Form2_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            this.Enabled = true;
        }
    }
}

如果您想使用网格视图或其他东西,您可以以相同的方式启用/禁用网格。

如果您还有其他问题,请告诉我。

希望对你有帮助..!

【讨论】:

  • 我没有测试过,但我相信如果你禁用Form2,它将停止接收KeyDown事件,所以你将无法使用这种方法再次启用它(即使使用@ 987654325@)
  • 很好,如果您已经对其进行了测试并且它有效:这是我的赞成票 :-)
  • 那么为什么它对我不起作用?正如我在图片中看到的那样,我什么都做不了......
  • @VorTex 您是否在表单上将KeyPreview 设置为true
  • 我完全按照你说的和你在帖子中写的做
猜你喜欢
  • 2015-07-11
  • 2012-04-18
  • 1970-01-01
  • 2023-03-30
  • 2017-05-26
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多