靈魂-放水

          為學(xué)日益,為道日損。

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks

          提問(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é)了 呵呵
          
          posted on 2007-02-02 08:53 放水老倌 閱讀(11373) 評(píng)論(2)  編輯  收藏 所屬分類: .NET

          Feedback

          # re: [轉(zhuǎn)]新手入門-WinForm如何打開(kāi)一個(gè)新窗體得同步關(guān)閉當(dāng)前窗體。另求C/S結(jié)構(gòu)程序設(shè)計(jì)方式。 2007-08-21 17:51 Jos
          原窗體如果是主窗體的話,那么原窗體是不可以Close,只能hide.主窗體Close了就會(huì)把整個(gè)程序關(guān)閉.  回復(fù)  更多評(píng)論
            

          # re: [轉(zhuǎn)]新手入門-WinForm如何打開(kāi)一個(gè)新窗體得同步關(guān)閉當(dāng)前窗體。另求C/S結(jié)構(gòu)程序設(shè)計(jì)方式。[未登錄](méi) 2007-08-29 08:07 放水老倌
          在手持設(shè)備端開(kāi)發(fā)的時(shí)候,hide不太好用。  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 曲麻莱县| 基隆市| 宜城市| 格尔木市| 江油市| 麻城市| 如皋市| 淄博市| 康马县| 明星| 正镶白旗| 进贤县| 章丘市| 新郑市| 全椒县| 宿州市| 大同市| 清徐县| 三明市| 静安区| 翼城县| 江口县| 沙坪坝区| 安岳县| 社旗县| 定州市| 石阡县| 武平县| 旬阳县| 鸡东县| 三原县| 绍兴县| 宜章县| 三都| 余姚市| 沅江市| 怀化市| 乌兰县| 庆城县| 洱源县| 敦煌市|