我正在创建一个可以同时打开多个表单的C#应用程序。这个目前的工作原理是首先打开表单,然后加载他们的内容。如何强制打开表单,加载其内容,然后打开下一个?
重复操作是触发多个表单一次打开的原因。
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ShowForms();
Application.Run();
}
static void ShowForms()
{
Random random = new Random();
int formCount = 0;
RepeatAction(5, () =>
{
formCount++;
int x = random.Next(0, 1000);
int y = random.Next(0, 1000);
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();
});
}
答案 0 :(得分:0)
function isEmpty(ele)
{
var count = ele.html().replace(/\s*/, '');
if(count>0)
return false;
return true;
}
console.log(isEmpty($('p')));
导致显示表单。因此,要么将form.Show();
设置为顺序循环,要么保留一个表单数组,然后遍历数组并调用RepeatAction
函数。
答案 1 :(得分:0)
尝试创建一个回调方法,而不是简单的循环,在实例化时为每个表单提供回调方法,从其Load事件的末尾(或任何句柄形式填充)回调到主逻辑。然后回调将跟踪已创建的表单数量并终止“循环”。
它可能看起来像:
static volatile int formCount = 0;
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ShowForms(5);
Application.Run();
}
static void ShowForms(int formsLeft)
{
if(formsLeft == 0) return;
Random random = new Random();
int x = random.Next(0, 1000);
int y = random.Next(0, 1000);
Form1 form = new Form1
{
StartPosition = FormStartPosition.Manual,
ShowInTaskbar = false,
Location = new Point(x, y),
LoadCallback = ()=>ShowForms(formsLeft - 1);
};
form.FormClosed += (sender, e) =>
{
if (--formCount > 0)
{
return;
}
Application.ExitThread();
};
formCount++;
form.Show();
}
然后,您需要将LoadCallback属性添加到Action1类型的Form1,或者不带参数并返回void的自定义命名委托。然后,您只需在填充表单的任何方法的末尾调用LoadCallback()
,然后返回此代码,只创建一个表单,直到没有。