C# 如何一次打开多个表单
如何一次生成多个表单,而不让用户在显示下一个表单之前退出每个表单C# 如何一次打开多个表单,c#,winforms,C#,Winforms,如何一次生成多个表单,而不让用户在显示下一个表单之前退出每个表单 public static void RepeatAction(int repeatCount, Action action) { for (int i = 0; i < repeatCount; i++) action(); } static void Main(string[] args) { RepeatAction(10, () => { Random rand
public static void RepeatAction(int repeatCount, Action action)
{
for (int i = 0; i < repeatCount; i++)
action();
}
static void Main(string[] args)
{
RepeatAction(10, () => {
Random random = new Random();
int x = random.Next(0, 100);
Random random1 = new Random();
int y = random.Next(0, 100);
var form = new Form1
{
StartPosition = FormStartPosition.Manual,
ShowInTaskbar = false,
Location = new Point(x, y)
};
form.ShowDialog();
});
publicstaticvoidrepeataction(int repeatCount,Action-Action)
{
对于(int i=0;i{
随机=新随机();
int x=随机。下一个(0,100);
Random random1=新的Random();
int y=random.Next(01100);
变量形式=新形式1
{
StartPosition=FormStartPosition.Manual,
ShowInTaskbar=false,
位置=新点(x,y)
};
form.ShowDialog();
});
目前,这是通过打开一个表单来实现的,用户单击该表单,然后打开一个新表单。如何使十个表单同时打开?试试form.Show()
publicstaticvoidrepeataction(int repeatCount,Action-Action)
{
对于(int i=0;i
{
随机=新随机();
int x=随机。下一个(0,100);
Random random1=新的Random();
int y=random.Next(01100);
变量形式=新形式1
{
StartPosition=FormStartPosition.Manual,
ShowInTaskbar=false,
位置=新点(x,y)
};
form.Show();
});
来自:
您可以使用ShowDialog()
在应用程序中显示模式对话框。调用此方法时,它后面的代码直到对话框关闭后才会执行
除非您想为每个表单生成不同的线程,否则您应该使用您的代码有几个问题:
ShowDialog()
Application.Run()
在program.Main()
方法的末尾提供。在您的示例中,ShowDialog()
方法提供了这个循环,但使用它当然还有其他问题(请参阅第一期:)Random
对象。这不仅会使Random
提供的关于随机数均匀分布的任何保证无效,而且您经常会一次又一次地得到完全相同的数,因为代码的执行速度非常快,以至于Random
类不会更改(它基于当前的勾号计数)static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ShowForms();
Application.Run();
}
public static void RepeatAction(int repeatCount, Action action)
{
for (int i = 0; i < repeatCount; i++)
action();
}
static void ShowForms()
{
Random random = new Random();
int formCount = 0;
RepeatAction(10, () =>
{
formCount++;
int x = random.Next(0, 100);
int y = random.Next(0, 100);
Form1 form = new Form1
{
StartPosition = FormStartPosition.Manual,
ShowInTaskbar = false,
Location = new Point(x, y)
};
form.FormClosed += (sender, e) =>
{
if (--formCount > 0)
{
return;
}
Application.ExitThread();
};
form.Show();
});
}
}
静态类程序
{
///
///应用程序的主要入口点。
///
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ShowForms();
Application.Run();
}
公共静态void RepeatAction(int repeatCount,Action Action)
{
对于(int i=0;i
{
formCount++;
int x=随机。下一个(0,100);
int y=random.Next(01100);
Form1 form=新Form1
{
StartPosition=FormStartPosition.Manual,
ShowInTaskbar=false,
位置=新点(x,y)
};
form.FormClosed+=(发件人,e)=>
{
如果(--formCount>0)
{
返回;
}
Application.ExitThread();
};
form.Show();
});
}
}
注:
- 您可能会注意到
方法与默认Winforms模板提供的方法几乎相同。我建议始终从该模板开始,并对其进行最小的更改Main()
- 默认模板创建一个表单实例并将其传递给
。但这种方法使该表单成为“主表单”,当该窗体关闭时,整个程序将退出。在上面的示例中,该程序将仅在所有打开的窗体关闭时退出。它通过不将任何窗体实例传递给Application.Run()
(这将应用程序退出的控制权交给了您),然后保留一个跟踪打开的窗体数量的计数器。当计数器返回到零时,将调用Application.Run()
,这将导致Application.ExitThread()
方法返回,从而允许程序退出Application.Run()
- 我通过简单地将
对象的初始化移出表单创建循环来解决随机数问题,只做一次,并为每个所需的随机数重用相同的对象random
- 我不知道
方法的要点是什么(除了普通的RepeatAction()
循环之外,似乎没有添加任何有用的内容),但为了与原始代码保持一致,我把它放在了那里for
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ShowForms();
Application.Run();
}
public static void RepeatAction(int repeatCount, Action action)
{
for (int i = 0; i < repeatCount; i++)
action();
}
static void ShowForms()
{
Random random = new Random();
int formCount = 0;
RepeatAction(10, () =>
{
formCount++;
int x = random.Next(0, 100);
int y = random.Next(0, 100);
Form1 form = new Form1
{
StartPosition = FormStartPosition.Manual,
ShowInTaskbar = false,
Location = new Point(x, y)
};
form.FormClosed += (sender, e) =>
{
if (--formCount > 0)
{
return;
}
Application.ExitThread();
};
form.Show();
});
}
}