在c#的应用程序编程中。     Form frm=new Form();
    frm.ShowDialog();    这两行的代码实现了模式对话框的使用过程。我们也知道模式对话框在窗口被关闭之前,ShowDialog()下面的代码是不会执行的,那么ShowDialog是如何实现的呢 ?我们可不可以用自己定以的方法来实现和ShowDialog()相同的功能,比方说,我们在Form中定义一个方法,名称为CustomShowDialog()
    public DialogResult CustomShowDialog()
    {
        this.Show();
        .......
    }    如何编写代码才能获得和ShowDialog()相同的功能。

解决方案 »

  1.   

    frm.Show();
    这个在初始Page_Load里面的事件是会被执行的啊!
      

  2.   

    frm.ShowDialog();模态
    frm.Show()非模态
      

  3.   

    我只说说想法,具体我没有实现过。
    模式对话框必须有父亲窗体,而打开模式对话框的时候,父窗体里的代码暂时无法执行的,所以,只要在父窗体的fucus()方法里判断一下是否有模式对话框的存在,有就使得模式对话框获得焦点,没有就无所谓了。
    这样应该可以简单地体现一下模式对话框的效果吧。
      

  4.   

    首先感谢jefflovejava,
       要实现模态对话框,首先重要的一点是当模态对话框实现的时候,父窗体的代码是停止执行的,只有这样当掉用完成之后才能从ShowDialog()中返回DialogResult的值,然后代码向下执行。但仅仅在focus()方法里判断的话是不能使父窗体的代码停止执行的,如果是这样的话,我们仅能在对话框窗体的关闭事件中判断DialogResult的值,而如果这样的话,也就失去了模态对话框的意义。
       也就是说现在首要解决的问题是如何让父窗体代码停止执行的前提下,还能正常运行对话框窗体,当对话框窗体被关闭时,父窗体的代码继续执行。在对话框窗体显示时,父窗体仍然可以执行重绘(因为没有出现花屏的现象),这就应该不仅仅是简单的线程挂起的问题。