C中關(guān)閉第一個(gè)Form窗口開啟另一個(gè)新窗口方法_第1頁(yè)
C中關(guān)閉第一個(gè)Form窗口開啟另一個(gè)新窗口方法_第2頁(yè)
C中關(guān)閉第一個(gè)Form窗口開啟另一個(gè)新窗口方法_第3頁(yè)
C中關(guān)閉第一個(gè)Form窗口開啟另一個(gè)新窗口方法_第4頁(yè)
C中關(guān)閉第一個(gè)Form窗口開啟另一個(gè)新窗口方法_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——C中關(guān)閉第一個(gè)Form窗口,開啟另一個(gè)新窗口方法C#中關(guān)閉第一個(gè)Form窗口,開啟另一個(gè)新窗口方法

好多同學(xué)問(wèn)怎么關(guān)閉一個(gè)FORM開啟另一個(gè)新Form。這個(gè)問(wèn)題最多的是在做登錄驗(yàn)證時(shí),使用第一個(gè)登錄窗登錄成功后要關(guān)閉自己,然后開啟新窗顯示。沒(méi)想到這個(gè)問(wèn)題在.Net還成了問(wèn)題,不過(guò)仍舊有好多方法解決。典型的

Form1f=newForm1();f.Show();this.Close();

最終的關(guān)閉時(shí)把整個(gè)程序都關(guān)閉了

1隱蔽法,原理就是把舊窗口隱蔽掉,再開啟新窗口。//新建一個(gè)NewForm窗口(NewForm是自己定義的Form)NewFormfm=newNewForm()

this.Hide();//隱蔽現(xiàn)在這個(gè)窗口fm.Show();//新窗口顯現(xiàn)

這種方法舊的窗口依舊會(huì)占內(nèi)存,因此假使用來(lái)做登陸窗口不太好,但是假使舊窗口是以后還需要恢復(fù)的主窗口,這個(gè)方法便很不錯(cuò),由于以后可以關(guān)掉新窗口,再用舊窗口.Show()就可以恢復(fù)舊窗口了。

所以這個(gè)方法適合在主窗口和子窗口間傳遞信息。

2、再來(lái)便是為登錄窗口設(shè)計(jì)的方法了。在Program.cs里這樣定義:

staticvoidMain(){

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

//新建Login窗口(Login是自己定義的Form)LoginLog=newLogin();

//使用模式對(duì)話框方法顯示LogLog.ShowDialog();

//DialogResult就是用來(lái)判斷是否返回父窗體的if(Log.DialogResult==DialogResult.OK){

//在線程中開啟主窗體

Application.Run(newMain());}}

在登陸窗口中驗(yàn)證終止后要賦值Log.DialogResult=DialogResult.OK。登錄窗口完成任務(wù)后會(huì)被直接關(guān)掉,主窗口就開啟了

網(wǎng)上大多都是前面2種方法,另外還看到一個(gè)方法用線程的方法方法,未驗(yàn)證3開新線程

publicstaticvoidThreadProc(){

Application.Run(newForm());}

privatevoidbutton1_Click(objectsender,EventArgse){

System.Threading.Threadt=newSystem.Threading.Thread(newSystem.Threading.ThreadStart(ThreadProc));t.Start();}

C#編程時(shí),經(jīng)常會(huì)遇四處理兩個(gè)或多個(gè)窗口的問(wèn)題。以登錄窗口為例,當(dāng)?shù)卿洿翱诘卿涷?yàn)證成功后,要進(jìn)入主窗口,此時(shí)需要關(guān)閉登錄窗口,這時(shí)候用this.close()是不可以的。由于Program.cs中

staticvoidMain(){

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);Application.Run(newForm1());}

Main函數(shù)是程序的入口點(diǎn),當(dāng)你在Form1中調(diào)用this.close()的時(shí)候,Application.Run(newForm1())中Form1就會(huì)終止,也就是說(shuō)整個(gè)程序終止了,此時(shí)主窗口也會(huì)相應(yīng)的關(guān)閉,這不是我們想看到的。下面有兩種方法來(lái)只關(guān)閉登錄窗口,而主窗口依舊運(yùn)行。

4.先隱蔽登錄窗口,然后在主窗口關(guān)閉后將登錄窗口關(guān)閉

這種方法只是把登錄窗口隱蔽了,主程序還在運(yùn)行。實(shí)現(xiàn)方法為:登錄窗口代碼:

if(user.CheckIn()){

MainFormmyform=newMainForm(this);//調(diào)用帶參的構(gòu)造函數(shù)myform.Show();this.Hide();}else{

MessageBox.Show(\用戶名或密碼錯(cuò)誤\}

登錄成功后,通過(guò)構(gòu)造函數(shù)傳入登錄窗口的參數(shù)到主窗口,這樣在主窗口里可以直接對(duì)登錄窗口操作

Form1loginform=null;//在主窗口添加帶參的構(gòu)造函數(shù)publicMainForm(Form1myform){

this.loginform=myform;InitializeComponent();}

主窗口關(guān)閉后,關(guān)閉登錄窗口

privatevoidMainForm_FormClosed(objectsender,FormClosedEventArgse){

loginform.Close();}

5.將主窗口程序設(shè)為主運(yùn)行程序,修改Program.cs

Application.Run(newMainForm());

這樣系統(tǒng)啟動(dòng)時(shí),運(yùn)行的是主窗口程序。然后在主窗口加載時(shí)去調(diào)用登錄窗口就可以了。

privatevoidMainForm_Load(objectsender,EventArgse){

Form1form=newForm1();form.ShowDialog();this.Close();}

登錄窗口代碼為:if(user.CheckIn()){

this.Close();}else{

MessageBox.Show(\用戶名或密碼錯(cuò)誤\}

C#在一個(gè)窗口中開啟另一個(gè)窗口,同時(shí)關(guān)閉該窗口

C#編程時(shí),經(jīng)常會(huì)遇四處理兩個(gè)或多個(gè)窗口的問(wèn)題。以登錄窗口為例,當(dāng)?shù)卿洿翱诘卿涷?yàn)證成功后,要進(jìn)入主窗口,此時(shí)需要關(guān)閉登錄窗口,這時(shí)候用this.close()是不可以的。由于Program.cs中staticvoidMain(){

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);Application.Run(newForm1());}

Main函數(shù)是程序的入口點(diǎn),當(dāng)你在Form1中調(diào)用this.close()的時(shí)候,

Application.Run(newForm1())中Form1就會(huì)終止,也就是說(shuō)整個(gè)程序終止了,此時(shí)主窗口也會(huì)相應(yīng)的關(guān)閉,這不是我們想看到的。下面有兩種方法來(lái)只關(guān)閉登錄窗口,而主窗口依舊運(yùn)行。

1.先隱蔽登錄窗口,然后在主窗口關(guān)閉后將登錄窗口關(guān)閉

這種方法只是把登錄窗口隱蔽了,主程序還在運(yùn)行。實(shí)現(xiàn)方法為:登錄窗口代碼:if(user.CheckIn()){MainFormmyform=newMainForm(this);//調(diào)用帶參的構(gòu)造函數(shù)myform.Show();this.Hide();}else{MessageBox.Show(\用戶名或密碼錯(cuò)誤\}

登錄成功后,通過(guò)構(gòu)造函數(shù)傳入登錄窗口的參數(shù)到主窗口,這樣在主窗口里可以直接對(duì)登錄窗口操作

Form1loginform=null;

//在主窗口添加帶參的構(gòu)造函數(shù)publicMainForm(Form1myform){

this.loginform=myform;InitializeComponent();}

主窗口關(guān)閉后,關(guān)閉登錄窗口

privatevoidMainForm_FormClosed(objectsender,FormClosedEventArgse){

loginform.Close();}

2.將主窗口程序設(shè)為主運(yùn)行程序,修改Program.cs

Application.Run(newMainForm());這樣系統(tǒng)啟動(dòng)時(shí),運(yùn)行的是主窗口程序。然后在主窗口加載時(shí)去調(diào)用登錄窗口就可以了。privatevoidMainForm_Load(objectsender,EventArgse){

Form1form=newForm1();form.ShowDia

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論