C#模式窗體問題:一個模式窗體彈出另外一個模式窗體,但是這個模式窗體卻關不掉!!在線等待!!!!!!!!!!!!!!!!


主窗體彈出一個模式窗體,上面有兩個按鈕:上一步,下一步。點擊下一步之后彈出另外一個模式窗體,上面還是有兩個按鈕:上一步,下一步。但是如果一直這樣點下去的話,所有的窗體都累加到這了,我明明在彈出另外一個模式窗體的時候close了這個窗體了,可是卻沒有close掉,導致后面窗體一個個都累加到這了。。我最開始用代碼手動close()窗體:
         private void button2_Click(object sender, EventArgs e)
        {
            ProcessHelp2 help = new ProcessHelp2();
            help.ShowDialog();
            this.Close();
        } 
設了斷點看了,close()已經走到了,為什么就是不關呢。我又改成這樣:
private void button2_Click(object sender, EventArgs e)
        {
            ProcessHelp2 help = new ProcessHelp2();
            this.Close();
            help.ShowDialog(); 
        }  
反正都一樣,就是所有的窗體都累計到那了。

請大俠們幫忙解決下啊,小弟在線等待!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

18 个解决方案

#1


private void button2_Click(object sender, EventArgs e) 
        { 
            ProcessHelp2 help = new ProcessHelp2(); 
if(help.ShowDialog()==DialogResult.OK)
            this.Close(); 
             
        }  

#2


用HIDE吧

#3


hide 不行的  一樣   我試了的啊哥們!!

#4


象上一\下一步這樣的功能窗體,可以在一個窗體上實現的啊.
如果真要按你的實現
 Form2 frm = new Form2();
 frm.Show();

foreach (Form f in Application.OpenForms)
{
   if ((f is Form1))
   {
      f.Hide();
      break;
   }

#5


引用 4 樓 tdwy1997 的回復:
象上一\下一步這樣的功能窗體,可以在一個窗體上實現的啊. 
如果真要按你的實現 
Form2 frm = new Form2(); 
frm.Show(); 

foreach (Form f in Application.OpenForms) 

  if ((f is Form1)) 
  { 
      f.Hide(); 
      break; 
  } 

試試樓上的.

#6


把help.ShowDialog(); 方法
換為help.Show(); 就可以了
help.ShowDialog(); 方法會把該窗體累計顯示出來。

#7


private void button2_Click(object sender, EventArgs e) 
{
  Hide(); 
  ProcessHelp2 help = new ProcessHelp2(); 
  help.ShowDialog(); 
}

#8


不能用showdialog(), 改用show(). 



        public Form2(Form parentForm)
        {
            InitializeComponent();
            this.parentForm = parentForm;
        }

        private Form parentForm = null;
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(parentForm);
            
            form2.Show(form2.parentForm);
            form2.Location = this.Location;
            
            this.Close();
        }


簡單處理,會閃爍

#9


public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this);
            form2.Show(this);
        }

#10


不過show的話就不是模式窗口了。最好的方法還是把這幾個窗口做到TabControl里,一個一個顯示。

#11


導航可以用tabcontrol

#12


引用 4 樓 tdwy1997 的回復:
象上一\下一步這樣的功能窗體,可以在一個窗體上實現的啊.

Exactly!

showdialog(showdialog(showdialog(......))))))))...  StackOverFlow

#13


haha,stack overflow.

#14


在另一個類中定義一個變量 如 int a=0;

private void button2_Click(object sender, EventArgs e) 
        { 
            a=1;
          this.close();
        }
在main中寫
if(類名.a==1)
{
  application.Run(new form2())
}
這樣就ok了
我建議你別用hide 這樣容易導致計算機變慢

#15


問題可以這樣解決:

private void button2_Click(object sender, EventArgs e) 
        { 
            ProcessHelp2 help = new ProcessHelp2(); 
            help.ShowDialog(); 
            this.Close(); 
        } 
中的help.ShowDialog(); 改為help.Show();就可以了

#16


private void button2_Click(object sender, EventArgs e) 
        { 
            ProcessHelp2 help = new ProcessHelp2(); 
            help.Show(); 
            this.Close(); 
        } 
恩  今天 我也碰到了  找到老師 解決的

#17


你是不是理解錯了,你應該用一個 主窗體放好上一步/下一步,然后在這個窗體彈出或加載其他內容,上一步下一步的時候Hide掉,這樣回退速度快,內容也在,而不是一步Close又Open

主窗體放好一個Panel,上一步,下一步,關閉.

每一步你可以用個UserContrl放置,然后用Panel.Add加載,用Hide和Show控制.

#18


引用 17 樓 zhuqueta0101 的回復:
你是不是理解錯了,你應該用一個 主窗體放好上一步/下一步,然后在這個窗體彈出或加載其他內容,上一步下一步的時候Hide掉,這樣回退速度快,內容也在,而不是一步Close又Open 

主窗體放好一個Panel,上一步,下一步,關閉. 

每一步你可以用個UserContrl放置,然后用Panel.Add加載,用Hide和Show控制.

樓上的方法不錯

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com