Winform学生信息管理系统登陆窗体设计(1)

下面是Winform学生信息管理系统登陆窗体设计的完整攻略。

一、设计思路

设计一个Winform学生信息管理系统登陆窗体需要以下几步:

  1. 新建一个Winform项目,添加登陆窗体。
  2. 设计登陆窗体的布局,包括添加组件,设置组件属性等。
  3. 为登陆窗体的组件添加事件处理程序,比如点击按钮触发登陆操作。
  4. 在事件处理程序中,编写验证登陆信息的代码,并执行相应的操作。

二、实现步骤

1. 新建一个Winform项目,添加登陆窗体

打开Visual Studio,选择“文件”-“新建”-“项目”,选择Visual C#-Windows经典桌面-Winform应用程序。然后在解决方案资源管理器中,右键单击“应用程序”,选择“添加”-“新建项”,在“添加新项”对话框中选择“Windows 窗体”,命名为“LoginForm.cs”。

2. 设计登陆窗体的布局

在设计器中,将LoginForm.cs中的窗体大小设置为300*200。然后在窗体中添加两个Label、两个TextBox和两个Button控件。

其中第一个Label用于显示“用户名”,将其Text属性设置为“用户名”;第二个Label用于显示“密码”,将其Text属性设置为“密码”。

对于两个TextBox,一个用于输入用户名,一个用于输入密码。将其Multiline属性都设置为false,并分别设置为PasswordChar='*',以保证输入的密码被隐藏。

最后添加了两个Button控件,一个用于执行登陆操作,将其Text属性设置为“登录”;另一个用于取消登陆操作,将其Text属性设置为“取消”。

3. 为登陆窗体的控件添加事件处理程序

在设计器中,选中“登录”按钮,进入事件的属性面板,在Click事件下拉菜单中选择“事件处理程序”-“新建”,将窗体中的代码和事件处理联系起来。

在新建的事件处理程序“LoginForm_Load”方法中,添加以下代码:

         txtName.Focus(); //将光标设置在用户名输入框上

在“登录”按钮的“Click”事件处理程序中,添加以下代码:

        private void btnLogin_Click(object sender, EventArgs e)
        {
            //获取用户输入的用户名和密码
            string username = txtName.Text.Trim(); 
            string password = txtPwd.Text.Trim();

            //验证用户名和密码是否为空
            if (string.IsNullOrEmpty(username))
            {
                MessageBox.Show("请填写用户名!");
                txtName.Focus();
                return;
            }
            if (string.IsNullOrEmpty(password))
            {
                MessageBox.Show("请填写密码!");
                txtPwd.Focus();
                return;
            }

            //模拟账号验证
            if (username.Equals("admin") && password.Equals("123456"))
            {
                MessageBox.Show("登录成功!");
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            else
            {
                MessageBox.Show("用户名或密码错误,请重试!");
                txtPwd.Clear();
                txtPwd.Focus();
            }
        }

这里使用了一个模拟账号验证的方法,在实际应用中需要根据实际情况进行修改。

4. 执行登陆操作

最后,在主窗体中,可以使用以下代码来调用Login窗体实现登陆操作:

        private void btnLogin_Click(object sender, EventArgs e)
        {
            LoginForm loginForm = new LoginForm();

            if (loginForm.ShowDialog() == DialogResult.OK)
            {
                //按照实际情况进行跳转或其他操作
                MessageBox.Show("欢迎进入学生信息管理系统!");
            }
        }

这样,在单击主窗体上的“登录”按钮时,就会弹出登陆窗体,用户输入正确的用户名和密码后,返回一个“OK”的结果给主窗体,以便在登陆成功后进行相应的操作。

三、示例说明

以下是两条Winform学生信息管理系统登陆窗体设计的示例说明:

1. 示例一

在Winform登录窗口中添加“记住密码”和“自动登录”选项,勾选后显示不同的状态信息,实现以下逻辑:

  • “记住密码”被勾选时,下次进入登录窗口,密码栏自动填上上次登录的密码,用户名不变。
  • “自动登录”被勾选时,下次直接进入主窗口,不需要再次输入用户名和密码。
private void chkSavePwd_CheckedChanged(object sender, EventArgs e)
{
    if (chkSavePwd.Checked)
    {
        chkAutoLogin.Enabled = true;
    }
    else
    {
        chkAutoLogin.Enabled = false;
        chkAutoLogin.Checked = false;
    }
}

private void chkAutoLogin_CheckedChanged(object sender, EventArgs e)
{
    if (chkAutoLogin.Checked)
    {
        chkSavePwd.Checked = true;
        MessageBox.Show("自动登录已开启");
    }
    else
    {
        MessageBox.Show("自动登录已关闭");
    }
}

private void LoadLoginInfo()
{
    if (File.Exists("login.txt"))
    {
        using (StreamReader sr = new StreamReader("login.txt"))
        {
            txtName.Text = sr.ReadLine();
            txtPwd.Text = sr.ReadLine();
            chkSavePwd.Checked = Convert.ToBoolean(sr.ReadLine());
            if (chkSavePwd.Checked)
            {
                chkAutoLogin.Enabled = true;
                chkAutoLogin.Checked = Convert.ToBoolean(sr.ReadLine());
            }
        }
    }
}

private void SaveLoginInfo()
{
    using (StreamWriter sw = new StreamWriter("login.txt"))
    {
        sw.WriteLine(txtName.Text.Trim());
        sw.WriteLine(txtPwd.Text.Trim());
        sw.WriteLine(chkSavePwd.Checked);
        if (chkSavePwd.Checked)
        {
            sw.WriteLine(chkAutoLogin.Checked);
        }
    }
}

private void LoginForm_Load(object sender, EventArgs e)
{
    LoadLoginInfo();
}

private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (chkSavePwd.Checked)
    {
        SaveLoginInfo();
    }
}

private void btnLogin_Click(object sender, EventArgs e)
{
    //获取用户输入的用户名和密码
    string username = txtName.Text.Trim();
    string password = txtPwd.Text.Trim();

    //验证用户名和密码是否为空
    if (string.IsNullOrEmpty(username))
    {
        MessageBox.Show("请填写用户名!");
        txtName.Focus();
        return;
    }
    if (string.IsNullOrEmpty(password))
    {
        MessageBox.Show("请填写密码!");
        txtPwd.Focus();
        return;
    }

    //模拟账号验证
    if (username.Equals("admin") && password.Equals("123456"))
    {
        MessageBox.Show("欢迎进入学生信息管理系统!");
        if (chkAutoLogin.Checked)
        {
            this.DialogResult = DialogResult.OK;
        }
        else
        {
            this.DialogResult = DialogResult.Yes;
        }
        this.Close();
    }
    else
    {
        MessageBox.Show("用户名或密码错误,请重试!");
        txtPwd.Clear();
        txtPwd.Focus();
    }
}

2. 示例二

在Winform登录窗口中实现验证码功能,实现以下逻辑:

  • 启动窗口时,产生一个四位数字验证码,以及对应的验证码图片,显示出来。
  • 输入用户名和密码后,如果验证码错误,提示验证码错误。若验证码正确,执行登陆操作。
private string code;
private void LoginForm_Load(object sender, EventArgs e)
{
    GenerateCode();
}

private void GenerateCode()
{
    Random random = new Random();
    code = string.Empty;
    for (int i = 0; i < 4; i++)
    {
        code += random.Next(10).ToString();
    }
    Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.White);
    for (int i = 0; i < code.Length; i++)
    {
        Font font = new Font("微软雅黑", 26, (FontStyle.Bold | FontStyle.Italic));
        Brush brush = new SolidBrush(Color.FromArgb(
            random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
        g.DrawString(code[i].ToString(), font, brush, i * 50 + 10, 5);
    }
    for (int i = 0; i < 50; i++)
    {
        Brush brush = new SolidBrush(Color.FromArgb(
            random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
        bmp.SetPixel(random.Next(0, bmp.Width), random.Next(0, bmp.Height), brush.Color);
    }
    panel1.BackgroundImage = bmp;
}

private void btnRefresh_Click(object sender, EventArgs e)
{
    GenerateCode();
}

private void btnLogin_Click(object sender, EventArgs e)
{
    //获取用户输入的用户名、密码和验证码
    string username = txtName.Text.Trim();
    string password = txtPwd.Text.Trim();
    string usercode = txtCode.Text.Trim();

    //验证用户名和密码是否为空
    if (string.IsNullOrEmpty(username))
    {
        MessageBox.Show("请填写用户名!");
        txtName.Focus();
        return;
    }
    if (string.IsNullOrEmpty(password))
    {
        MessageBox.Show("请填写密码!");
        txtPwd.Focus();
        return;
    }
    if (string.IsNullOrEmpty(usercode))
    {
        MessageBox.Show("请填写验证码!");
        txtCode.Focus();
        return;
    }

    //验证验证码
    if (usercode.Equals(code))
    {
        //模拟账号验证
        if (username.Equals("admin") && password.Equals("123456"))
        {
            MessageBox.Show("欢迎进入学生信息管理系统!");
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        else
        {
            MessageBox.Show("用户名或密码错误,请重试!");
            txtPwd.Clear();
            txtPwd.Focus();
        }
    }
    else
    {
        MessageBox.Show("验证码错误,请重新输入!");
        txtCode.Clear();
        txtCode.Focus();
        GenerateCode();
    }
}

以上就是Winform学生信息管理系统登陆窗体设计的完整攻略,包括设计思路、实现步骤和示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Winform学生信息管理系统登陆窗体设计(1) - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C#编译器对局部变量的优化指南

    下面是详细的攻略步骤: 1. 了解C#编译器的局部变量优化特性 C#编译器通过对代码进行优化,可以提高程序的性能和效率。其中一种优化技术就是对局部变量进行优化。在函数内部定义的局部变量,如果没有被后续的代码继续引用,那么编译器就会优化掉这些变量的存储和访问操作。这种优化可以减少内存开销和CPU的负载,从而提高程序的执行效率。 2. 使用C#编译器的自带优化选…

    C# 2023年6月1日
    00
  • C#实现简单学生信息管理系统

    C#实现简单学生信息管理系统 介绍 本文将详细讲解如何使用C#实现一个简单的学生信息管理系统。该系统可以实现学生信息的增删改查等基本功能,并且可以将数据存储在本地文件中。 准备工作 在编写学生信息管理系统之前,我们需要准备以下工作: 安装Visual Studio或其他C#开发环境。 确保已经学习了C#的基础知识。 确定学生信息的字段和数据类型。例如,我们需…

    C# 2023年6月2日
    00
  • .NET中文乱码的解决方法分享

    让我来为你详细讲解在.NET中解决中文乱码的方法。 1. 确保源代码文件的编码方式正确 在.NET开发中,我们经常使用Visual Studio作为开发工具来编写源代码文件,确保源代码文件的编码方式正确是解决中文乱码问题的第一步。通常建议使用UTF-8编码格式进行文件编码,因为UTF-8支持所有的Unicode字符,并且避免了中文乱码问题。在Visual S…

    C# 2023年5月31日
    00
  • Javascript的作用域、作用域链以及闭包详解

    Javascript的作用域、作用域链以及闭包详解 什么是作用域? 作用域是指代码中定义变量的区域,也是访问这些变量的规则。在Javascript中常见的作用域有全局作用域和函数作用域。 全局作用域 全局作用域是指定义在最外层的变量,在整个程序执行过程中都可以访问到。例如下面的代码: var name = "Lucy"; function…

    C# 2023年6月7日
    00
  • C# Directory.GetFiles – 获取目录下的所有文件

    Directory.GetFiles 方法是 C# 中用于返回指定文件夹中所有文件的方法,下面是它的基本语法和参数说明: public static string[] GetFiles(string path); public static string[] GetFiles(string path, string searchPattern); publi…

    C# 2023年4月19日
    00
  • 简述C#枚举高级战术

    下面是详细讲解“简述C#枚举高级战术”的完整攻略。 什么是枚举 枚举是一种特殊的数据类型,它表示一组有限的值,这组值被称为枚举成员。在C#中,我们使用enum关键字来定义枚举类型。下面是定义一个枚举类型的示例: enum Color { Red, Green, Blue } 这里我们定义了一个名为Color的枚举类型,它包含了三个枚举成员:Red、Green…

    C# 2023年5月14日
    00
  • C#中使用@声明变量示例(逐字标识符)

    C#中使用@声明变量的方式又被称为逐字(verbatim)标识符。这种方式可以避免C#关键字与变量名冲突的问题,同时也支持在字符串中直接输出换行符和制表符等特殊字符,非常实用。下面我们详细讲解一下如何使用@声明变量。 基本语法 使用@声明变量的基本语法如下: @变量名 = 值 其中,@符号紧贴变量名,表示对变量名进行逐字标识符声明。 示例一 下面来看一个简单…

    C# 2023年5月15日
    00
  • Oracle中的序列SEQUENCE详解

    Oracle中的序列SEQUENCE详解 简介 在Oracle数据库中,SEQUENCE是一种对象,可以用于生成唯一的数字序列。典型的用法包括生成主键ID,但它还可以用于其他用途,如生成订单号、交易号等。 一个SEQUENCE对象由三个主要的元素组成: 序列名:是用于标识该序列的名称,在创建SEQUENCE对象时必须指定该属性; 起始值:是该序列生成数字的初…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部