打开表单时显示ShowDialog问题

时间:2013-12-06 07:24:29

标签: c# .net windows c#-4.0

我有2个表格

Form1中

窗体2

我在Form1中有一个按钮

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

但问题是在打开形式的时候,它是昙花一现,而且是一种贬低的方式

我试过使用show()但是没有解决问题

如果我没有使用Disposed方法,那么第一次运行表格时它会显示并消失,但是通过点击按钮它可以在第二时间运行正常......

在Form2_Load事件中,我正在使用这两个属性

        private void Form2_Load(object sender, EventArgs e)
            {
               this.RightToLeft = RightToLeft.Yes;
               this.RightToLeftLayout = true;            
            }

4 个答案:

答案 0 :(得分:1)

加载时不要更改表单布局。在启动之前更改它。从Form2_Load中删除代码并将其放入button1_Click

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 =new Form2();
    f2.RightToLeft = RightToLeft.Yes;
    f2.RightToLeftLayout = true;
    f2.ShowDialog();
}

答案 1 :(得分:1)

我猜你想使用相同的按钮显示关闭 form2。我怀疑你最初的问题描述

  

“问题是在打开形式的时候,这是一种昙花一现的想法”

我认为form2在打开时没有'闪烁',但是当您尝试再次点击form1

中的按钮时,它会“闪烁” 在您调用它之后,

ShowDialog()将退出执行。意思是,单击按钮后它将退出执行。

因此,您应该在按钮点击事件

中使用条件语句尝试Show()

在form1.cs

    bool flag = false;
    Form2 frm2;

    private void button1_Click(object sender, EventArgs e)
    {
        if (flag == false)
        {
            frm2 = new Form2();
            frm2.Show();
            frm2.Load += new EventHandler(frm2_Load);
            frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
            flag = true;
        }
        else
        {
            frm2.Close();
            flag = false;
        }

    }

    void frm2_Load(object sender, EventArgs e)
    {
        //set what ever properties you like
    }

    void frm2_FormClosed(object sender, FormClosedEventArgs e)
    {
        flag = false;
    }

另请参阅:A dialog disables all of the windows that your program displays

答案 2 :(得分:0)

删除此属性

this.RightToLeft = RightToLeft.Yes;

并运行您的表单......

答案 3 :(得分:0)

试试这个:

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

         }