如何在打开另一个之前加载表单?

时间:2017-03-16 12:57:28

标签: c#

我正在创建一个可以同时打开多个表单的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();
    });
}

2 个答案:

答案 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(),然后返回此代码,只创建一个表单,直到没有。