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# System.TypeInitializationException 异常处理方案

    首先我们来简单地了解一下什么是”System.TypeInitializationException”异常。 “System.TypeInitializationException”是.NET框架中的一种异常,它通常发生在类或结构体初始化时,当初始化过程中发生错误时就会抛出该类异常。例如,在类的静态构造函数中,初始化对象时出现错误,或者在静态变量初始化期间出…

    C# 2023年5月15日
    00
  • C# 用什么方法将BitConverter.ToString产生字符串再转换回去

    要将BitConverter.ToString产生的字符串再转换回为二进制数据,可以使用以下两种方法: 1. 使用BitConverter.GetBytes和Convert.FromHexString 可以使用BitConverter.GetBytes将一个十六进制字符串转换为等效的字节数组,然后使用Convert.FromHexString将该数组转换为二…

    C# 2023年6月7日
    00
  • c#调用vc写的ocx控件示例

    C# 调用 VC 写的 OCX 控件需要使用 COM 互操作技术来实现,这里提供一份完整攻略,包含如下步骤: 编写 VC 的 OCX 控件首先需要使用 VC 编写一个 OCX 控件,在编写过程中需要注意接口设计,以便在后续的调用中能够顺利确定方法和参数。实现后,需要注册控件并生成 TLB 文件。 引入 TLB 文件在 C# 项目中引入生成的 TLB 文件,以…

    C# 2023年6月7日
    00
  • 通过C#程序操作Config文件

    为了方便C#程序对配置信息的读取和修改,我们通常会将配置信息保存在XML格式的Config文件中。本文将介绍如何通过C#程序操作Config文件的完整攻略。 1.读取Config文件 1.1.方式一:使用System.Configuration.ConfigurationManager类 using System.Configuration; // 读取配置…

    C# 2023年5月15日
    00
  • .NET中的属性用法分析

    .NET中的属性用法分析 属性是.NET框架中的一个关键特性,它提供了一种在运行时为对象附加元数据以及在对象上设置特定行为的机制。本文将深入介绍属性的用法分析。 属性的定义 属性定义与函数定义的核心区别在于,属性指定了用于获取或设置值的特定方法。 如下是一个示例: public class Person { private string name; publ…

    C# 2023年5月31日
    00
  • Winform中Treeview实现按需加载的方法

    一、Winform中Treeview实现按需加载的方法 Winform中的Treeview控件非常适合用于显示树形结构的数据,但如果树的层次比较多或者数据比较庞大,一次性将所有数据全部加载到TreeView中显然不太现实,这时就需要实现按需加载的功能,即当需要展开树节点时,才动态地加载该节点下的子节点。 实现按需加载需要以下几个步骤: 1.设置TreeVie…

    C# 2023年5月31日
    00
  • 基于 .NET 6 的ASP.NET Core启动地址配置方法及优先级顺序

    基于 .NET 6 的ASP.NET Core启动地址配置方法及优先级顺序 在ASP.NET Core中,我们可以通过配置启动地址来指定应用程序的监听地址。本攻略将详细介绍基于.NET 6的ASP.NET Core启动地址配置方法及优先级顺序,并提供两个示例说明。 启动地址配置方法 以下是基于.NET 6的ASP.NET Core启动地址配置方法: 在Pro…

    C# 2023年5月16日
    00
  • C#条件编译、内联函数、CLS介绍

    C#条件编译 条件编译是指在编译程序时根据编译器指定的条件选择性地包含或排除某些代码的技术。在C#中,可以使用条件编译指令来控制代码的编译,以便在特定条件下只编译相关代码。 C#中可用的条件编译指令包括: if 指令:如果指定的符号已定义,则编译下面的代码;否则跳过。 elif 指令:如果前面的 #if 或 #elif 条件不成立,并且指定的符号已定义,则编…

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