C#预防创建其他表单

时间:2016-05-12 09:03:59

标签: c# forms events

我有一个表单Form1,其中包含一个可以创建其他表单的按钮。但是,我想一次只创建一个额外的表单。以下是我的以下代码实现。我尝试使用Focus属性,但它不起作用。

private void addLocation(object sender, MouseClickEventArgs e)
{
   Form2 form2 = new Form2();
   form2.Show();
   form2.Focus();
}

3 个答案:

答案 0 :(得分:1)

使用Application.OpenForms集合检查您是否已打开该表单的实例。

private void addLocation(object sender, MouseClickEventArgs e)
{
   Form2 form2 = Application.OpenForms.OfType<Form2>().SingleOrDefault();
   if(form2 == null)
   {
       form2 = new Form2();
       form2.Show();
       form2.Focus();
   }
}

答案 1 :(得分:1)

因此,如果打开表单,则应将其置于最前面并集中注意力(显示模拟),如果未打开则创建并且显示

  // If there're many instances, let's take the last one
  Form2 form = Application.OpenForms
    .OfType<Form2>()
    .LastOrDefault(); 

  if (null == form) {
    form = new From2();
    form.Show();
  }
  else {
    // Show emulation: 
    //   - we don't want minimized window, 
    //   - window should be at front
    //   - window should have a keyboard focus

    if (form.WindowState == FormWindowState.Minimized)
      form.WindowState = FormWindowState.Normal;

    form.BringToFront();

    if (form.CanFocus)
      form.Focus(); 
  } 

答案 2 :(得分:0)

您可以通过更改光标来禁止用户单击按钮,然后在代码创建表单完成后或以自己的形式恢复

// Set cursor as hourglass

Cursor.Current = Cursors.WaitCursor;

//在这里执行时间密集的哈希代码......

//将光标设置为默认箭头 Cursor.Current = Cursors.Default;