WinForm 多窗體操作


1多窗體操作:
確定哪個是主窗體 通過窗體進入其他窗體 代碼如下

1 Form2 f2 = new Form2();//f2窗體實例化出來
2 f2.Show();//進入f2窗體
3 this.Hide();//將主窗體隱藏

存在問題:主窗體隱藏了,關閉其它窗體后,沒有將主窗體顯示或關閉,那么程序就關不上了

問題處理:構造函數傳值,將窗體傳到另一個窗體中去

 1 public partial class Form2 : Form
 2 {
 3 Form1 F1 = null;//在窗體2中將窗體1實例化出來
 4 public Form2(Form1 f1)
 5 {
 6 InitializeComponent();
 7 F1 = f1; //給F1賦值 
 8 }
 9 //找到窗體的屬性 事件里面的Formclosing行為雙擊進入編寫關閉代碼;
10 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
11 {
12 F1.Close();關閉窗體2是窗體1關閉
13 }

2、窗體只能打開一個方法 代碼如下

 1 //創建一個全局的泛型集合,為了放置全部打開的窗體
 2 List<Form> First = new List<Form>();
 3 //在窗體打開之前,判斷集合中是否有name一致的窗體,如果有就說明已經打開了,就不要再打開了
 4 bool has = false;//定義中間變量,判斷窗體是否打開
 5 Form2 f2 = new Form2();//f2窗體實例化出來
 6 foreach (Form F in First)//遍歷集合中的窗體
 7 if (F.Name == f2.Name)//已經開啟過
 8 {
 9 has = true;//將has賦值為true
10 }
11 
12 if (has)//應經打開
13 { 
14 }
15 else//沒打開
16 {
17 First.Add(f2);
18 f2.Show();//打開f2窗體
19 }

存在問題一:當窗體打開了,關閉后,就無法再次打開了

解決辦法:

 1 //當窗體關閉時,清除Form1中集合中的此窗體對象記錄
 2 public void deleteform(Form F)//清除打開窗體的方法(函數)
 3 {
 4 First.Remove(F);
 6 }
 7 //關閉窗體2時調用此方法
 8 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
 9 {
10 if (F1 != null)
11 {
12 F1.deleteform(this);
13 }

存在問題二:當窗體已經打開,再次點擊打開按鈕,不會將已打開的窗體重新顯示並焦點進入
解決辦法:
1.找到已打開對象,將WindowState屬性設置為:Normal
2.找到已打開窗體的對象,使用Focus方法;

 1 bool has = false;//定義中間變量,判斷窗體是否打開
 2 Form2 f2 = new Form2();//f2窗體實例化出來
 3 foreach (Form F in First)//遍歷集合中的窗體
 4 if (F.Name == f2.Name)//已經開啟過
 5 {
 6 has = true;//將has賦值為true
 7 F.WindowState = FormWindowState.Normal;//找到已打開對象,將WindowState屬性設置為:Normal
 8 F.Focus();//設置焦點
 9 
10 }
11 
12 if (has)//應經打開
13 { 
14 f2.close(); 
15 }
16 else//沒打開
17 {
18 First.Add(f2);
19 f2.Show();//打開f2窗體
20 }

3、窗體之間的傳值和控制

傳值:構造函數傳值

第一步,找到窗體對象,
第二步:將窗體對象的控件值更改
注意:要將窗體中的對象訪問權限修改
找到窗體里的Form1.Designer.cs
進入修改對象的訪問權限

將private 改為 public

4、提示框類型的窗體

ShowDialog();

作用:只能操作show的窗體,當關閉時才能操作別的窗體


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM