提問(wèn):
問(wèn)者:7712190(25458848@163.com) 信譽(yù):96 級(jí)別:user5 日期:2006-9-10 23:49:27
小弟一直都是做 B/S開(kāi)發(fā) 這幾天心血來(lái)潮 想寫一寫 C/S程序 一入門就遇到這個(gè)問(wèn)題 我在 登陸窗體體 NEW了 一個(gè)新窗體吧新窗體Show了 之后 原來(lái)得窗體cLOSE。新NEW得窗體也關(guān)閉了 不知道為什么 請(qǐng)指點(diǎn) 另求 C/S程序得 設(shè)計(jì)方法。 比如如何處理 公共得變量 等應(yīng)該注意得事情 希望大家不吝賜教
回復(fù):
答者:wzq6511() 信譽(yù):100 級(jí)別:user1 日期:2006-9-11 0:36:28 id:36659940
不要用close,用hide,原先的窗體只能隱藏起來(lái)不能關(guān)閉。
答者:bejon(阿牛[如果我懂,必坦誠(chéng)相告;如果您懂,請(qǐng)不憐賜教。]) 信譽(yù):93 級(jí)別:star1 日期:2006-9-11 2:00:21 id:36660132
在new form后使用this.close;來(lái)完成 在new form之前把窗體id寫在注冊(cè)表,然后在new form之后檢查那里,如果有值就使用api關(guān)閉那個(gè)窗體,然后把注冊(cè)表清空。
答者:zhgroup(王員外) 信譽(yù):99 級(jí)別:star1 日期:2006-9-11 8:06:33 id:36660371
1、要看原窗體是那個(gè)窗體了,如果是入口的窗體,則應(yīng)hide,想要顯示時(shí)可用Show. 如果是登陸窗體,在主窗體的Main入口處 FormLogin frm = new FormLogin(); frm.ShowDialog(); if 登陸失敗 關(guān)閉窗體 return 2、和B/S基本類似,只不過(guò)對(duì)于狀態(tài)信息比較容易控制。
答者:qzh1119(大浪淘沙) 信譽(yù):59 級(jí)別:user2 日期:2006-9-11 8:12:07 id:36660412
up
答者:qzh1119(大浪淘沙) 信譽(yù):59 級(jí)別:user2 日期:2006-9-11 8:12:33 id:36660419
關(guān)注,學(xué)習(xí)中
答者:bestshl(快樂(lè)的Coder) 信譽(yù):100 級(jí)別:user2 日期:2006-9-11 8:24:52 id:36660529
zhgroup(王員外) 正解
答者:interboy(馮東) 信譽(yù):100 級(jí)別:user2 日期:2006-9-11 8:27:37 id:36660559
zhgroup(王員外) 說(shuō)的對(duì),如果你把main函數(shù)放在loginform里的話,那么它就是主窗體,如果你在它里面調(diào)用了this.close();你想啊,主窗體都關(guān)了,別的呢,皮之不存,毛將焉附! 建議把loginform作為子窗體,通過(guò)主窗體了掉子窗體進(jìn)行判斷
答者:7712190(25458848@163.com) 信譽(yù):96 級(jí)別:user5 日期:2006-9-11 12:40:41 id:36667940
問(wèn)題是我不想HIde 真的沒(méi)有其他的辦法了么?
答者:lovefootball(蟑螂(生活就是扯淡--做人要放低姿態(tài))) 信譽(yù):98 級(jí)別:star2 日期:2006-9-11 12:49:07 id:36668125
上面已經(jīng)說(shuō)清楚了 如果你不想hide 那你就在main里面先new這個(gè)登陸窗體 如果登陸成功在run主窗體 否則關(guān)閉
答者:zahuifan(雜燴飯) 信譽(yù):93 級(jí)別:star1 日期:2006-9-11 12:56:33 id:36668305
up
答者:guyes123(以為喜歡這里,所以來(lái)接分) 信譽(yù):100 級(jí)別:user1 日期:2006-9-11 13:00:06 id:36668391
一般還是用HIDE吧 其他的我就不會(huì)了
答者:naturalth(自我批判,是思想、品德、素質(zhì)、技能創(chuàng)新的優(yōu)良工具) 信譽(yù):99 級(jí)別:user4 日期:2006-9-11 13:07:31 id:36668586
#region "Main" public ModMain() { } [STAThreadAttribute] static void Main() { //異常處理 Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler); Common.Database.ConnectionString = Get_Info(); frmLogon frm = new frmLogon(); frm.txtUser.Text = loginUser; if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel) { return; } System.Windows.Forms.Application.Run(new myMenu()); } #endregion
答者:xvting(xvting) 信譽(yù):103 級(jí)別:user4 日期:2006-9-11 15:10:44 id:36672298
VS默認(rèn)的WinForm程序模板只有一個(gè)程序消息循環(huán),并且入口Form關(guān)閉的同時(shí)退出程序消息循環(huán),結(jié)束程序。 開(kāi)始 | | 消息循環(huán)(入口Form) | | 結(jié)束
答者:xvting(xvting) 信譽(yù):103 級(jí)別:user4 日期:2006-9-11 15:14:42 id:36672390
可以設(shè)計(jì)下面的流程 開(kāi)始 | | False 消息循環(huán)(登陸Form)--------- | | | True | | | 消息循環(huán)(主Form) | | | |-------------------------- 退出
答者:xvting(xvting) 信譽(yù):103 級(jí)別:user4 日期:2006-9-11 15:16:34 id:36672453
Demo StartApp.cs文件 ///////////////////////////////////////////////////////////////// using System; using System.Windows.Forms; using System.Drawing; using System.Text; namespace WinFromDemo { public class StartApp { private static bool LoginResult = false; [STAThread] static void Main() { //First Message Loop LoginContext loginContext = new StartApp.LoginContext(); Application.Run(loginContext); if (LoginResult) { //Second Message Loop StartApp.MainContext mainContext = new StartApp.MainContext(); Application.Run(mainContext); } } public class LoginContext : ApplicationContext { private LoginDialog loginDialog; public LoginContext() { loginDialog = new LoginDialog(); loginDialog.StartPosition = FormStartPosition.CenterScreen; loginDialog.Closed += new EventHandler(OnFormClosed); loginDialog.Show(); } private void OnFormClosed(object sender, EventArgs e) { LoginResult = !(this.loginDialog.DialogResult == DialogResult.Cancel); ExitThread(); } } public class MainContext : ApplicationContext { private Form mainForm; public MainContext() { mainForm = new Form(); mainForm.StartPosition = FormStartPosition.CenterScreen; mainForm.Closed += new EventHandler(OnFormClosed); mainForm.Show(); } private void OnFormClosed(object sender, EventArgs e) { ExitThread(); } } } }
答者:csLius() 信譽(yù):100 級(jí)別:user2 日期:2006-9-11 15:17:56 id:36672496
http://blog.csdn.net/Knight94/archive/2006/08/22/1104957.aspx
答者:pegtop(再回首) 信譽(yù):100 級(jí)別:user2 日期:2006-9-11 15:23:51 id:36672677
新窗體是在原窗體基礎(chǔ)上建立起來(lái)的,不能關(guān)閉原窗體只能隱藏. 要想處理全局變量,建議采用Static變量
答者:pretty_soft() 信譽(yù):100 級(jí)別:user1 日期:2006-9-11 15:36:50 id:36673096
我覺(jué)得還是 開(kāi)啟---登陸畫面/顯示主窗體默認(rèn)界面---用showdialog顯示登陸---判斷返回值初始權(quán)限 這樣比較好 把應(yīng)用程序加載放到啟動(dòng)畫面去 這種更適合比較大的系統(tǒng),不同的模塊不同的用戶權(quán)限
答者:Santos(快樂(lè)的GG) 信譽(yù):100 級(jí)別:user4 日期:2006-9-11 16:15:46 id:36674473
ShowDialog();方法才是正解. Button1_Click() { xxxForm frm = new xxxForm(); frm.ShowDialog(); }
答者:kissknife(側(cè)身向南邊) 信譽(yù):100 級(jí)別:user5 日期:2006-9-11 16:20:54 id:36674652
http://www.cnblogs.com/KissKnife/archive/2006/09/10/500158.html
答者:ttgzs(一路狂奔) 信譽(yù):100 級(jí)別:user1 日期:2006-9-11 17:01:58 id:36676000
#region "Main" public ModMain() { } [STAThreadAttribute] static void Main() { //異常處理 Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler); Common.Database.ConnectionString = Get_Info(); frmLogon frm = new frmLogon(); frm.txtUser.Text = loginUser; if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel) { return; } System.Windows.Forms.Application.Run(new myMenu()); } #endregion
答者:kubbye(小蛤蟆就是我) 信譽(yù):100 級(jí)別:user1 日期:2006-9-11 23:15:00 id:36681363
準(zhǔn)確的說(shuō),做為啟動(dòng)窗體的那個(gè)窗體是不能關(guān)的,它關(guān)了,程序就停了,其他的窗體可以關(guān),啟動(dòng)窗體只能隱藏
答者:kubbye(小蛤蟆就是我) 信譽(yù):100 級(jí)別:user1 日期:2006-9-11 23:17:29 id:36681383
接上面,你可以把主界面作為啟動(dòng)窗體,然后在主界面未顯示出來(lái)前,先顯示登錄窗體,登錄成功再顯示主窗體,登錄不成功,直接退出,直接在form的load事件中寫就好了
答者:qiujb(楚留香) 信譽(yù):100 級(jí)別:user2 日期:2006-9-12 8:12:25 id:36682515
zhgroup(王員外) 正解
答者:Samen168(讓代碼為你寫代碼) 信譽(yù):95 級(jí)別:star1 日期:2006-9-12 8:56:52 id:36683381
邏輯問(wèn)題 main() { loginform lf = new loginform(); if(lf.Showdialog() == DialogResult.OK) { mainform mf = new mainform(); mf.show(); } } 這樣根據(jù)不存在誰(shuí)打開(kāi)誰(shuí)
答者:Samen168(讓代碼為你寫代碼) 信譽(yù):95 級(jí)別:star1 日期:2006-9-12 8:57:00 id:36683386
根本
答者:sunxianyu(找工作) 信譽(yù):100 級(jí)別:user2 日期:2006-9-12 9:05:26 id:36683679
zhgroup(王員外) ( ) 信譽(yù):99 Blog 正解
答者:fds2003(Hunter) 信譽(yù):99 級(jí)別:user5 日期:2006-9-12 9:17:54 id:36684103
上面能說(shuō)的都講了!
答者:yangao(偶新手 請(qǐng)問(wèn)門在哪里?) 信譽(yù):100 級(jí)別:user4 日期:2006-9-12 9:41:16 id:36684775
學(xué)習(xí)
答者:henrydee1(小d) 信譽(yù):101 級(jí)別:user2 日期:2006-9-12 10:29:21 id:36686255
if (this.ActiveMdiChild!=null) { this.ActiveMdiChild.Close(); //關(guān)閉已經(jīng)打開(kāi)的子窗體 } InSchool child_InSchool=new InSchool(); child_InSchool.MdiParent=this;//this表示本窗體為其父窗體 child_InSchool.Show();
答者:xiaoliangwh(小亮wh) 信譽(yù):100 級(jí)別:user2 日期:2006-9-12 23:55:03 id:36705585
xuexi
答者:sdl2005lyx() 信譽(yù):100 級(jí)別:user4 日期:2006-9-13 8:26:41 id:36706505
lz:一個(gè)很簡(jiǎn)單的辦法(剛好前幾天解決的): 你在原來(lái)的窗體設(shè)置一個(gè)public bool bNew=false;的變量,在你要new新窗體的地方改成如下代碼: bNew=true; this.Close(); //原來(lái)窗體消失了,但它的類作用域并沒(méi)有消失 然后在你原來(lái)定義、使用原窗體變量的地方,即frmOld.ShowDialog();之后: if(frmOld.bNew) { NewForm frmNew=new NewForm (); frmNew.ShowDialog(); } 問(wèn)題就搞定了。。。
答者:GXY2005(曉晨美眉好^_^) 信譽(yù):94 級(jí)別:user5 日期:2006-9-13 8:52:21 id:36707030
jf
答者:wuhuiITren(CSDN男主角) 信譽(yù):100 級(jí)別:user2 日期:2006-9-14 13:26:23 id:36740819
樓上的都說(shuō)了,樓主自己一個(gè)個(gè)試就可以了啊,想怎么辦就怎么辦啊
答者:slex(蘂橤(蛋不能扯遠(yuǎn),笑不能搞大)) 信譽(yù):100 級(jí)別:user4 日期:2006-9-14 14:35:50 id:36743030
上面的那兩個(gè)方法已經(jīng)能解決lz問(wèn)題了,該結(jié)了 呵呵