1. 程式人生 > >C#中關閉第一個Form視窗,開啟另一個新視窗方法

C#中關閉第一個Form視窗,開啟另一個新視窗方法

C#程式設計時,經常會遇到處理兩個或多個視窗的問題。以登入視窗為例,當登入視窗登入驗證成功後,要進入主視窗,此時需要關閉登入視窗,這時候用this.close()是不可以的。因為Program.cs中  

       static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        Main 函式是程式的入口點,當你在Form1中呼叫this.close ()的時候,Application.Run(new Form1())中Form1就會結束,也就是說整個程式結束了,此時主視窗也會相應的關閉,這不是我們想看到的。下面有兩種方法來只關閉登入視窗,而主視窗仍然執行。

4. 先隱藏登入視窗, 然後在主視窗關閉後將登入視窗關閉

      這種方法只是把登入視窗隱藏了,主程式還在執行。實現方法為:

     登入視窗程式碼:

       if (user.CheckIn())
                {
                    MainForm myform = new MainForm(this);   //呼叫帶參的建構函式
                    myform.Show();
                     this.Hide();
                }
                else
                {
                    MessageBox.Show("使用者名稱或密碼錯誤");
                }

          登入成功後,通過建構函式傳入登入視窗的引數到主視窗,這樣在主窗口裡可以直接對登入視窗操作

          Form1 loginform = null;
          // 在主視窗新增帶參的建構函式
          public MainForm(Form1 myform)
          {
              this.loginform = myform;
              InitializeComponent();
          }

           主視窗關閉後,關閉登入視窗

          private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
          {
            loginform.Close();
          }

5. 將主視窗程式設為主執行程式,

     修改Program.cs

        Application.Run(new MainForm());

     這樣系統啟動時,執行的是主視窗程式。然後在主視窗載入時去呼叫登入視窗就可以了。

       private void MainForm_Load(object sender, EventArgs e)
        {
            Form1 form = new Form1();
            form.ShowDialog();
            this.Close();
        }

       登入視窗程式碼為:

       if (user.CheckIn())
        {
                this.Close();
        }
        else
        {
               MessageBox.Show("使用者名稱或密碼錯誤");
        }

相關推薦

C#關閉一個Form視窗開啟一個視窗方法

C#程式設計時,經常會遇到處理兩個或多個視窗的問題。以登入視窗為例,當登入視窗登入驗證成功後,要進入主視窗,此時需要關閉登入視窗,這時候用this.close()是不可以的。因為Program.cs中          static void Main()         {             App

js關閉一個視窗開啟一個視窗

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script type="text/javascript">

給定一個隨機數範圍產生一個隨機數範圍

#include <bits/stdc++.h> using namespace std; int rand6(){ return rand()%6+1; } int rand7()

C#在一個視窗開啟一個視窗同時關閉視窗

C#程式設計時,經常會遇到處理兩個或多個視窗的問題。以登入視窗為例,當登入視窗登入驗證成功後,要進入主視窗,此時需要關閉登入視窗,這時候用this.close()是不可以的。因為Program.cs中          static void Main()        

c#在一個視窗開啟一個視窗

1、今天功能需要,開啟新的視窗,這裡簡單記錄下2、實現機制,在主程式開啟第一個視窗,在第一個窗口裡面寫入觸發事件,開啟另一個視窗,並隱藏當前視窗3、實現程式碼段    建立兩個視窗 分別為  setParams 和 main    在主程式中預設開啟setParams視窗  

連結串列---給定一個連結串列刪除連結串列倒數n個節點返回連結串列的頭節點

連結串列中的節點個數大於等於n 給出連結串列1->2->3->4->5->null和 n = 2. 刪除倒數第二個節點之後,這個連結串列將變成1->2->3->5->null ListNode removeNthF

C# 隱藏一個窗體後開啟一個窗體使用Show()和Hide()方法

新建兩個窗體Form1 和Form2 ; Form1 中的按鈕 的單擊事件方法裡面的程式碼; Form2 fm2= new Form2(this); fm2.Show(); this.Hide(); Form2 窗體裡面的程式碼; Form1 fm1 = new Fo

c# winform登入(關閉當前form跳轉到一個form

賬號、密碼驗證通過後,執行以下程式碼     System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));            

C#按鈕事件有迴圈一個按鈕控制停止暫停繼續程式執行

首先在窗體上有 lable1,//執行顯示 button1,//開始 button2,//暫停和繼續 button3//停止 窗體上還放Timer控制元件timer1 程式碼實現如下, using System; using System.Collections.Gener

更新表字段一個查詢出來

code upd 另一個 查詢 print ng- ble where sql UPDATE t SET t.Premium = (SELECT TOP 1 Max( t2.Premium ) FROM dbo.TableName t

C#圖片轉換為Base64編碼Base64編碼轉換為圖片

byte[] agen oms ase gef urn for app raw #region 圖片轉為base64編碼的字符串 public string ImgToBase64String(string Imagefilename) {

.NET 如果一個Task A正在await一個Task B那麽Task A是什麽狀態

ont inf src inner 新建 就是 代碼 sleep void .NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態?答案是:WaitingForActivation 新建一個.NET Core控制臺程序,輸入如

java--建立一個Test類包含有一個public許可權的int型成員變數與一個char型別的成員變數觀察在main方法的初始值。

//建立一個Test類 class Test1{ //包含有一個public許可權的int型成員變數與一個char型別的成員變數 public int a; public char c; } //主類 public class Test{ //主函式 publ

C++的行內函數預設引數和佔位引數

說明:裡面的示例程式碼有些被註釋掉了,想執行時要去掉註釋 #include "iostream" using namespace std; /**      內聯函數出現的原因:     C++中的const常量可以替代巨

小米是一個幼兒園老師每學期的泥塑課上她都會給每個學生髮不超過 250250 立方厘米的等量橡皮泥教大家做泥塑。在上課過程中,她發現每個班都恰好有一個小朋友會去搶另一個小朋友的橡皮泥

小米是一個幼兒園老師,每學期的泥塑課上,她都會給每個學生髮不超過 250 立方厘米的等量橡皮泥,教大家做泥塑。在上課過程中,她發現每個班都恰好有一個小朋友會去搶另一個小朋友的橡皮泥,於是她決定,在正式開始做泥塑前,讓大家把手裡的橡皮泥都捏成一個立方體,並且測量手裡捏好的橡皮泥的長、寬和高

C#類與物件的關係以及方法申明的static修飾符

C#中,類(class)的書寫,是class 類名稱:例如class Program這就是一個Program類,類理解起來就是同一類事物,具有同樣的特性,就如同我們常說的人類,鳥類,這樣具有相同特性和行為的一類事物的統稱,在程式設計中這種特性我們可以把它用一些方法功能來表示,例如程式:

react專案使用antd的form元件動態設定input框的值

問題: 建立賬號時,輸入賬號後不搜尋直接儲存,提示查詢後,再點搜尋就不能搜尋這個賬號了 原因: 點選儲存之後,對錶單進行了驗證,導致之後請求的資料無法在更新到input框中,也就是說即使在state中有值,也不會更新initialValue值,就導致搜尋後的值不能正

c#引用Microsoft.SqlServer.Types後系統執行報"未能載入 SqlServerSpatial140.dll找不到指定的模組(異常來自......)的解決方法

1.在資源管理器中檢視C:\Windows\System32或者C:\Windows\SysWOW64下有沒有SqlServerSpatialXXX.dll的檔案,如果沒有,在網上下載後,把檔案重新命名為報錯的dll檔名,將其放入此目錄下 2.如果有,如下圖,我將原本的130改為140,程式便不

c++switch的default問題1331不同位置結果不同

首先明確一點default不同位置輸出是不同的: 例子; #include <iostream> using namespace std; int main() {     int a=

C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後一個工程使用:使用前需配置標頭檔案(.h)靜態庫(.lib)和 動態庫(.dll )專案屬性

一、簡介 我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。 1、為什麼要生成DLL和lib?      就是為了給VS工程呼叫(比如C#呼叫、C++工程)。 2、C#為什麼要呼叫DLL和lib? C++寫的程