WinForm应用程序
我在程序主入口点代码如下:
[STAThread]
        static void Main()
        {
            frmLogin login = new frmLogin();
            login.ShowDialog();
            if (login.DialogResult==DialogResult.OK)
            {
                login.Close();
                //其它操作
            }
            else
            {
                login.Close();
            }
        }
而窗体frmLogin是个登陆窗体,两个按钮:
private void bt_ok_Click(object sender, EventArgs e)
        {
            bt_ok.DialogResult = DialogResult.OK;  //确定按钮
        }
private void bt_close_Click(object sender, EventArgs e)
        {
            bt_close.DialogResult = DialogResult.Cancel;  //取消按钮
        }问题:运行时,我需要按两下确定或者取消按钮才能执行操作。。咋回事??
不要跟我说其他的窗体传值方法,我这个情况比较特殊,其它的方式对我不适用。。
谢谢!!

解决方案 »

  1.   

    try...private void bt_ok_Click(object sender, EventArgs e) 
            { 
                //bt_ok.DialogResult = DialogResult.OK;  //确定按钮 
                  this.DialogResult = DialogResult.OK;  //确定按钮 
            } 
    private void bt_close_Click(object sender, EventArgs e) 
            { 
                //bt_close.DialogResult = DialogResult.Cancel;  //取消按钮 
                  this.DialogResult = DialogResult.Cancel;  //取消按钮 
            } 
      

  2.   

    一个简单的Login窗体,其它的如限制登录次数或用户信息传递等功能自己在frmLogin.cs中扩展
     
    Program.cs
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        frmLogin myLogin = new frmLogin();
        if (myLogin.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new frmMain());
        }
        //else
        //{
        //    MessageBox.Show("登录失败!");
        //}
    }
     
    frmLogin.cs
    private void btnOK_Click(object sender, EventArgs e)
    {
        //可以到数据库中验证
        if (txtUserName.Text == "test" && txtUserPWD.Text == "test")
        {
            this.DialogResult = DialogResult.OK;
        }
        else
        {
            MessageBox.Show("错误的用户名或密码!");
            txtUserName.Focus();
        }
    }
    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.Cancel;
    }
    private void frmLogin_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (this.DialogResult != DialogResult.Cancel && this.DialogResult != DialogResult.OK)
            e.Cancel = true;
    }
      

  3.   

    private void btn_ok_Click(object sender, EventArgs e)
            {
                button1.DialogResult = DialogResult.OK;  //确定按钮 
                validate();
            }        private void button2_Click(object sender, EventArgs e)
            {
                button2.DialogResult = DialogResult.Cancel;  //取消按钮 
                validate();
            }
            private void validate()
            {
                if (this.DialogResult == DialogResult.OK)
                {
                    this.Close();
                    //其它操作 
                }
                else
                {
                    this.Close();
                } 
            }
      

  4.   

    我刚才试验了一下,没问题.         public Form1()
            {
                InitializeComponent();            Form2 f2 = new Form2();
                f2.ShowDialog();
                if (f2.DialogResult == DialogResult.OK)
                {
                    Text = "Form2-Close normally";
                }
                f2.Close();
                f2.Dispose();
                        }
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.OK;
            }        private void button2_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.Cancel;
            }
        }