none
WinForm 開啟輸入密碼 RRS feed

  • 問題

  • 請問有些程式一開啟就要輸入帳號密碼...是如何達成?

    是透過兩個 form1 form2 嗎?

    運作模式是如何 ?

      private void Form1_Load(object sender, EventArgs e)

            {

                Form2 f2 = new Form2();

                f2.ShowDialog();

            }

    2011年6月19日 下午 03:24

解答

  • 其中一種做法

    先在 Form1設一個屬性其型別為Boolean, 預設初值為fasle

    假設叫 EnablePermission好了

    (1) 將Form1的參考傳給Form2

    (2) Form2認證如果通過, 則將EnablePermission設為true, 反之則為fasle

    (3) 因此, 在 f2.ShowDialog() 後面的程式碼判斷EnablePermission屬性, 如果是false則將 Form1 關掉

    PS: 如果你熟自訂事件, 也可以改寫為自訂事件處理

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 weipxf 2011年6月23日 下午 06:43
    2011年6月19日 下午 03:35
    版主
  • 我偷懶的方法

     [STAThread]

            static void Main()

            {

                    Control.CheckForIllegalCrossThreadCalls = false;

                    Application.EnableVisualStyles();

                    Application.SetCompatibleTextRenderingDefault(false);

     

                    frmLogin flogin = new frmLogin();

                    Application.Run(flogin);

                    if (flogin.DialogResult == DialogResult.OK)

                    {

                        if (flogin.isLogin)

                            Application.Run(new MainForm());

                    }

            }

    • 已標示為解答 weipxf 2011年6月23日 下午 06:42
    2011年6月20日 上午 05:31
  • Hi,

    我個人的習慣試驗證完後才建立後續要顯示的表單,提供給您參考。

    	static class Program
    	{
    		const int RETRY_MAX_COUNT = 3;	
     
    		/// <summary>
    		/// The main entry point for the application.
    		/// </summary>
    		[STAThread]
    		static void Main()
    		{
    			Application.EnableVisualStyles();
    			Application.SetCompatibleTextRenderingDefault(false);
     
    			int retryCount = 0;
     
    			using (var dlg = new LoginDialog())
    			{
    				while (retryCount < RETRY_MAX_COUNT && dlg.ShowDialog() == DialogResult.OK)
    				{
    					var id = dlg.ID;
    					var password = dlg.Password;
     
    					if (VeritfyPermission(id, password))
    						break;
    					else
    					{
    						++retryCount;
    					}
    				}
    				if (dlg.DialogResult == DialogResult.Cancel)
    					return;
    			}
    			Application.Run(new Form1());
    		}
     
    		private static Boolean VeritfyPermission (string id,string password)
    		{
    			...
    		}
    	}


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 weipxf 2011年6月23日 下午 06:42
    2011年6月20日 上午 07:44
  • 蹂躝 ,我可以參考 

    LoginDialog() code ?

    ShowDialog() ?

    VeritfyPermission() ?

    請問,為什麼要寫在 Program.cs ?

    thanks.

    LoginDialog就是一個對話框,放了兩個TextBox與OK按鈕

    OK按下時會設定DialogResult為DialogResult.OK

    另外會開出兩個屬性ID與Password

    分別會將兩個TextBox的值傳出去

     

    ShowDialog是BCL內建的方法

    就是Form.ShowDialog

     

    VeritfyPermission方法是驗證權限是否OK

    這部分我不會知道您在使用上會怎樣判斷

    這邊要自己實做

     

    至於為何要放在Program.cs

    因為Application.Run(new Form1());這行就會開始進入你的主表單

    我習慣性是驗證完才進去

    驗證失敗就跳掉


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 weipxf 2011年6月23日 下午 06:42
    2011年6月23日 上午 03:19

所有回覆

  • 其中一種做法

    先在 Form1設一個屬性其型別為Boolean, 預設初值為fasle

    假設叫 EnablePermission好了

    (1) 將Form1的參考傳給Form2

    (2) Form2認證如果通過, 則將EnablePermission設為true, 反之則為fasle

    (3) 因此, 在 f2.ShowDialog() 後面的程式碼判斷EnablePermission屬性, 如果是false則將 Form1 關掉

    PS: 如果你熟自訂事件, 也可以改寫為自訂事件處理

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 weipxf 2011年6月23日 下午 06:43
    2011年6月19日 下午 03:35
    版主
  • 2011年6月20日 上午 01:58
  • 我用Bill Chung 的延伸

    但我覺得你要熟整個登入的模型

    要先認證,接著授權..

    而不是登入後就有權限那麼簡單

    我都是判斷有無User物件,有就是有登入,無就是為登入,登出就把它設NULL

    然後用User去取得Role

    最後操作時再去比對這個Role這個User能不能執行此行為

     

    2011年6月20日 上午 02:32
  • 我偷懶的方法

     [STAThread]

            static void Main()

            {

                    Control.CheckForIllegalCrossThreadCalls = false;

                    Application.EnableVisualStyles();

                    Application.SetCompatibleTextRenderingDefault(false);

     

                    frmLogin flogin = new frmLogin();

                    Application.Run(flogin);

                    if (flogin.DialogResult == DialogResult.OK)

                    {

                        if (flogin.isLogin)

                            Application.Run(new MainForm());

                    }

            }

    • 已標示為解答 weipxf 2011年6月23日 下午 06:42
    2011年6月20日 上午 05:31
  • Hi,

    我個人的習慣試驗證完後才建立後續要顯示的表單,提供給您參考。

    	static class Program
    	{
    		const int RETRY_MAX_COUNT = 3;	
     
    		/// <summary>
    		/// The main entry point for the application.
    		/// </summary>
    		[STAThread]
    		static void Main()
    		{
    			Application.EnableVisualStyles();
    			Application.SetCompatibleTextRenderingDefault(false);
     
    			int retryCount = 0;
     
    			using (var dlg = new LoginDialog())
    			{
    				while (retryCount < RETRY_MAX_COUNT && dlg.ShowDialog() == DialogResult.OK)
    				{
    					var id = dlg.ID;
    					var password = dlg.Password;
     
    					if (VeritfyPermission(id, password))
    						break;
    					else
    					{
    						++retryCount;
    					}
    				}
    				if (dlg.DialogResult == DialogResult.Cancel)
    					return;
    			}
    			Application.Run(new Form1());
    		}
     
    		private static Boolean VeritfyPermission (string id,string password)
    		{
    			...
    		}
    	}


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 weipxf 2011年6月23日 下午 06:42
    2011年6月20日 上午 07:44
  • 蹂躝 ,我可以參考 

    LoginDialog() code ?

    ShowDialog() ?

    VeritfyPermission() ?

    請問,為什麼要寫在 Program.cs ?

    thanks.

    2011年6月22日 下午 04:58
  • 蹂躪的理由就寫在Hi 的底下那一行
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年6月22日 下午 05:27
    版主

  • 蹂躝 ,我可以參考 

    LoginDialog() code ?

    ShowDialog() ?

    VeritfyPermission() ?

    請問,為什麼要寫在 Program.cs ?

    thanks.

    蹂躪在上述有說: 我個人的習慣試驗證完後.....(略)

     

     

     


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2011年6月22日 下午 11:20
  • 蹂躝 ,我可以參考 

    LoginDialog() code ?

    ShowDialog() ?

    VeritfyPermission() ?

    請問,為什麼要寫在 Program.cs ?

    thanks.

    LoginDialog就是一個對話框,放了兩個TextBox與OK按鈕

    OK按下時會設定DialogResult為DialogResult.OK

    另外會開出兩個屬性ID與Password

    分別會將兩個TextBox的值傳出去

     

    ShowDialog是BCL內建的方法

    就是Form.ShowDialog

     

    VeritfyPermission方法是驗證權限是否OK

    這部分我不會知道您在使用上會怎樣判斷

    這邊要自己實做

     

    至於為何要放在Program.cs

    因為Application.Run(new Form1());這行就會開始進入你的主表單

    我習慣性是驗證完才進去

    驗證失敗就跳掉


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 weipxf 2011年6月23日 下午 06:42
    2011年6月23日 上午 03:19
  • 蹂躝 , 請問如果再程式碼最前面 加入

    using projects.Properties;

    上面那行為什麼要用命名空間的 projects ?

    namespace projects

    2011年6月24日 上午 03:50
  • Hi,

    我看不太懂您想問的

    using是用來匯入命名空間的

    命名空間可將類別分門別類放置

    若沒有using語法,以常用的Console.WriteLine為例

    我們必須在程式中使用System.Console.WriteLine來撰寫

    若是有在上面加入了using System;

    我們在後續撰寫時就可以寫成Console.WriteLine

    這是因為編輯器會自動到匯入的命名空間內下去找尋

    所以它認得Console是在System下面

     

    更進一步的了解可參閱

    使用命名空間 (C# 程式設計手冊)

    http://msdn.microsoft.com/zh-tw/library/dfb3cx8s.aspx#Y500


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年6月24日 上午 04:32
  • 就是有些...

     

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;

    using myform.Properties;   //為什麼有些多這行是做甚麼用的阿 ? 有些方案又沒有 ? 我不太了解.Properties ?

    namespace myform

     


    2011年6月24日 上午 04:52
  • Hi,

    那是Visual Studio幫您產生的

    當您在專案屬性中有建立資源檔或是設定檔

    就會幫你產生出下面兩個類別供您存取設定或是資源

    Properties.Settings 

    Properties.Resources 


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年6月24日 上午 04:57
  • 懂了, 謝謝 蹂躝 詳細解說...
    2011年6月24日 上午 05:13