关于C#WINFORM登录窗口的做法

前几天做一个程序,由于是基本新手,所以许多不会,现终于完事了,先记录下以便以后复习。

主要内容:

1、两个窗体frm_TPCalc(主窗体),frm_Login(登录窗口)

2、登录窗口要和主窗口皮肤一致,且主窗口支持换肤

---->要求登录窗口必须是主窗口的子窗体(目前水平认为必须这样,目前还是不行,因为虽然设置了但是子窗体关闭时主窗体才出来,无子窗体无法继承到)

3、登录窗口验证成功进入主窗体并将用户信息传入主窗体,验证失败仍然停留在登录窗口

---->3.1在子窗体定义属性获取用户信息然后主窗体调用;3.2主窗体要使用次用户信息的控件定义为公有;(这是自己最初的想法后来都不好使)

4、登录窗口直接退出(退出button或X)时,整个程序退出。

---->application.exit();是的用这个就行。(失败了)

用了几天做完后发现存在1个问题:登录窗口退出时,会出现窗口闪动,代码逻辑肯定有问题。

主要错误原因是登录窗口是主窗口ShowDialog出来的,子窗体关闭时回返回主窗体,用appliaction.exit了就会出现闪窗。

然后看网上些什么线程之类的也不会,然后就发帖请教。

继续改....直到成功代码如下:

在Program.cs中定义一个静态变量,用来实现登录窗口值的回传,这样就不必考虑frm_Login关闭时,frm_TPCalc还没有加载,无法将信息传入的尴尬,中转一下。

然后是直接ShowDialog出frm_Login,当frm_Login返回OK时(验证成功),才加载frm_TPCalc.

代码如下:

namespace Test
{
    static class Program
    {
        public static string username;
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //修改入口函数的首出窗口
            frm_Login f_login = new frm_Login();
            if (f_login.ShowDialog() == DialogResult.OK)
            {
                Application.Run(new frm_TPCalc());
            }
        }

    }
}

然后在frm_Login中定义验证成功是返回DialogResult.OK

namespace ThermalPowerTool
{
    public partial class frm_Login : Form
    {
        public frm_Login()
        {
            InitializeComponent();
        }
        private void btn_login_Click(object sender, EventArgs e)
        {
            if (TUser.Text != "" && TPwd.Text != "")
            {
                if (TUser.Text == "test" && TPwd.Text == "test")
                {
                    //验证成功后将用户名传给Program定义的变量username
                    Program.username = TUser.Text.Trim();
                    //定义验证成功时返回值                    
                       this.DialogResult = DialogResult.OK;
                    MessageBox.Show("登录成功!");
                }
                else
                { MessageBox.Show("账户或密码错误!"); }
            }
            else
            { MessageBox.Show("请输入账户和密码!"); }
        }
    }
}

最后在frm_TPCalc中读取用户信息

private void frm_TPCalc_Load(object sender, EventArgs e)
        {
            //加载皮肤文件
            skinEngine1.SkinFile = System.Windows.Forms.Application.StartupPath +@"\Themes\DeepOrange.ssk";
          User.Text ="欢迎你:"+ Program.username;
          User.Enabled = false;
        }

整完后看看很简单,主要难处是不了解C#窗体加载事件流程和窗体传值的几种方法,还需继续学习。

现在还存的问题是加载皮肤后太卡,先寻找高效率的第三方皮肤,然后学习自己做或学习WPF(看着很好)。

然后就是想弄个验证成功后的启动画面,据说要用多线程,然后学习多线程,现在从网上下了点源码先弄出个样子看看。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页