最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到Login窗口。其实,在Visual Studio 6以来,比较正确的做法,是判断Login窗口的返回值,然后决定是否打开主窗体,那么在C#中也是一样的。 具体做法如下:首先,创建Login窗口,然后添加相应的输入框和按钮,设置窗口的AcceptButton为窗体的确认按钮,而CancelButton为窗体的取消按钮。例如:            this.AcceptButton = this.btnOK;            this.CancelButton = this.btnCancel; 定义确定按钮以及取消按钮事件,如下:        private void btnOK_Click(object sender, System.EventArgs e)        {            // Here is to use fixed username and password            // You can check username and password from DB            if( txtUserName.Text == "Admin" && txtPassword.Text == "nopassword" )            {                // Save login user info                uiLogin.UserName = txtUserName.Text;                uiLogin.Password = txtPassword.Text;                 // Set dialog result with OK                this.DialogResult = DialogResult.OK;            }            else            {                // Wrong username or password                nLoginCount++;                if( nLoginCount == MAX_LOGIN_COUNT )                    // Over 3 times                    this.DialogResult = DialogResult.Cancel;                else                {                    MessageBox.Show( "Invalid user name and password!" );                    txtUserName.Focus();                }            }        }         private void btnCancel_Click(object sender, System.EventArgs e)        {            // Set dialog result with Cancel            this.DialogResult = DialogResult.Cancel;        } 然后,在Login窗体的Closing事件中,要进行处理,如下:private void frmLogin_Closing(object sender, System.ComponentModel.CancelEventArgs e){    // Check whether form is closed with dialog result    if( this.DialogResult != DialogResult.Cancel &&        this.DialogResult != DialogResult.OK )        e.Cancel = true;} 除此外,Login窗体一些辅助代码如下:        private int nLoginCount = 0;        private const int MAX_LOGIN_COUNT = 3;         private UserInfo uiLogin;        public frmLogin( ref UserInfo ui )        {            //            // Required for Windows Form Designer support            //            InitializeComponent();             // Set login info to class member            uiLogin = ui;        }        调用的时候,要修改程序的Main函数,如下:        /// <summary>        /// The main entry point for the application.        /// </summary>        [STAThread]        static void Main()         {            UserInfo ui = new UserInfo();            frmLogin myLogin = new frmLogin( ref ui );            if( myLogin.ShowDialog() == DialogResult.OK )            {                //Open your main form here                MessageBox.Show( "Logged in successfully!" );            }            else            {                MessageBox.Show( "Failed to logged in!" );            }        }        而附加的UserInfo类如下:    /// <summary>    /// User info class    /// </summary>    public class UserInfo    {        private string strUserName;        private string strPassword;        public string UserName        {            get{ return strUserName;}            set{ strUserName = value;   }        }        public string Password        {            get{ return strPassword;}            set{ strPassword = value;}        }        public UserInfo()        {            strUserName = "";            strPassword = "";        }    }

解决方案 »

  1.   

    楼主贴这个好像是CSDN上一位朋友的简单登陆事例,有什么问题。
      

  2.   

    LZ的Close事件没必要的,
    FormLogin form=new FormLogin();
    if(form.ShowDialog()== DialogResult.OK )
       Application.Run(new FormMain());
    else
        Application.Exit();
      

  3.   

    呵呵 …… MARK
      

  4.   

    从TEXT里得的的字符串记得Trim()一下,不是很容易判断不等的
      

  5.   

    好久都没有用到WinForm了,如果用Web方式的我们可以交流一下
      

  6.   


    static void Output()
    {
        System.Console.WriteLine("很好,很强大!机器人鉴定完毕!");
    }static void Main(string[] args)
    {
        Output();
    }输出:很好,很强大!机器人鉴定完毕!
      

  7.   

    static void Output()
    {
        System.Console.WriteLine("很好,很强大!机器人鉴定完毕!");
    }static void Main(string[] args)
    {
        Output();
    }
      

  8.   

    请对比一下:
    PETSHOP4.0的实现~~