C#基础学习笔记(十三)

C#基础学习笔记(十三)

1、MD5加密

存密码的时候需要加密

static void Main(string[] args)
{
    //123
    //202cb962ac59075b964b07152d234b70
    //202cb962ac5975b964b7152d234b70  x不一样
    //202cb962ac59075b964b07152d234b70 x2 加个0
    string s = GetMD5("123");
    Console.WriteLine(s);
    Console.ReadKey();
}
public static string GetMD5(string str)
{
    //创建MD5对象
    MD5 md5 = MD5.Create();
    //开始加密
    //需要将字符串转成字节数组
    byte[] buffer = Encoding.UTF8.GetBytes(str);
    //返回一个加密好的字节数组
    byte[] MD5Buffer = md5.ComputeHash(buffer);
    将字节数组转成字符串
    //return Encoding.UTF8.GetString(MD5Buffer);
    //这样转的都是乱码

    //将字节数组转成字符串
    //字节数组---字符串
    //1、将字节数组中每个元素按照指定的编码格式解析成字符串
    //2、直接将数组ToString();
    //3、将字节数组中的每个元素ToString();
    //尝试3
    string strNew = "";
    for (int i = 0; i < MD5Buffer.Length; i++) 
    {
        //加x可以十进制转成十六进制
        strNew += MD5Buffer[i].ToString("x2");
    }
    return strNew;
}

2、什么是winform

应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我们获得信息或者传输信息等。

winform文件的组成:

1)属性

2)引用

3)Program(应用程序的主入口点)

4)Form1.cs(UI界面、designer文件、Form1后台代码)

运行的过程:

进入Program主函数,创建Form1的对象,创建时进入Form1的构造函数,而他是一个partial部分类,在designer文件里边也有部分类,这两个部分类组成了Form1类。接着进入构造函数InitializeComponent()初始化组件,定义在designer里边,在这里给各个组件初始化。每在窗体里边托控件的时候就是不停的创建这些对象。

3、控件的属性

Name:在后台要获得前台的控件对象,需要使用Name属性。

visible:指示一个控件是否可见。

Enabled:指示一个控件是否可用。

ContextMenuStrip:按钮绑定右键菜单

4、事件

事件:发生一件事情。

注册事件:双击控件注册的都是控件默认被选中的那个事件。

触发事件:

5、窗体

在Main函数当中创建的窗体对象,我们称之为这个窗体应用程序的主窗体。也就意味着,当你将主窗体关闭后,整个应用程序都关闭了。

6、TextBox控件

WordWrap:指示文本框是否换行。

PasswordChar:让文本框显示一个单一的字符

ScollBars:是否显示滚动条

事件:

TextChanged 当文本框中的内容发生改变的时候触发这个事件。

7、跑马灯练习

abcde
bcdea
cdeab
deabc
eabcd
abcde

string str=“abcde”;
str=str.Substring(1)+str.Substring(0,1);

8、Timer

在指定的时间间隔内做一件指定的事情。

在这里插入图片描述

代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        //MessageBox.Show("你中病毒了");
        label1.Text = label1.Text.Substring(1) + label1.Text.Substring(0, 1);
    }
    /// <summary>
    /// 当窗体加载的时候,将当前的系统时间赋给lable
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Form1_Load(object sender, EventArgs e)
    {
        lblTimer.Text = DateTime.Now.ToString();
    }
    /// <summary>
    /// 每隔一秒就把当前的时间赋给lable1
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void timer2_Tick(object sender, EventArgs e)
    {
        lblTimer.Text = DateTime.Now.ToString();
        //设置一个闹钟
        if (DateTime.Now.Hour == 22 && DateTime.Now.Minute == 20 && DateTime.Now.Second == 50) 
        {
            //播放音乐
            SoundPlayer sp = new SoundPlayer();
            sp.SoundLocation = @".WAV";
            sp.Play();
        }
    }
}

9、简单记事儿本应用程序

1)、在程序加载的时候,取消文本框的自动换行,以及让两个按钮和文本框隐藏
2)、点击登陆,判断是否登陆成功
3)、自动换行功能
4)、保存文本到一个指定目录下。
在这里插入图片描述

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        txtWords.WordWrap = false;
        btnWordWrap.Visible = false;
        btnSave.Visible = false;
        txtWords.Visible = false;
    }
    /// <summary>
    /// 判断是否登陆成功
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnLogin_Click(object sender, EventArgs e)
    {
        string name = txtName.Text.Trim();
        string pwd = txtPwd.Text;

        if (name == "admin" && pwd == "admin")
        {
            MessageBox.Show("欢迎进入记事儿本应用程序");
            btnWordWrap.Visible = true;
            btnSave.Visible = true;
            txtWords.Visible = true;

            label1.Visible = false;
            label2.Visible = false;
            txtName.Visible = false;
            txtPwd.Visible = false;
            btnLogin.Visible = false;
            btnRest.Visible = false;
        }
        else//登录失败
        {
            MessageBox.Show("用户名或密码错误,请重新输入");
            txtName.Clear();
            txtPwd.Clear();
            //让文本框获得焦点
            txtName.Focus();
        }
    }
    /// <summary>
    /// 自动换行
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnWordWrap_Click(object sender, EventArgs e)
    {
        //当前是否是自动换行
        //如果是显示成取消自动换行
        //txtWords.WordWrap = true;
        if (btnWordWrap.Text == "自动换行")
        {
            //取消自动换行
            txtWords.WordWrap = true;
            btnWordWrap.Text = "取消自动换行";
        }
        else if (btnWordWrap.Text == "取消自动换行") 
        {
            txtWords.WordWrap = false;
            btnWordWrap.Text = "自动换行";
        }
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        using (FileStream fsWrite = new FileStream(@"D:\C#\peixun\Day14", FileMode.OpenOrCreate, FileAccess.Write)) 
        {
            string str = txtWords.Text.Trim();
            byte[] buffer = System.Text.Encoding.Default.GetBytes(str);
            fsWrite.Write(buffer, 0, buffer.Length);
        }
        MessageBox.Show("保存成功");
    }
}

10、单选和多选

checked:指示这个控件是否处于选中状态。

默认情况下,在一个窗体中,所有的单选按钮只允许选中一个,可以使用groupbox进行分组。

在这里插入图片描述

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //有一个没有选中
        if (rdoStudent.Checked || rdoTeacher.Checked) 
        {
            string name = txtName.Text.Trim();
            string pwd = txtPwd.Text;
            if (rdoStudent.Checked)
            {
                if (name == "student" && pwd == "student")
                {
                    MessageBox.Show("学生登陆成功");
                }
                else
                {
                    MessageBox.Show("登录失败");
                    txtName.Clear();
                    txtPwd.Clear();
                    txtName.Focus();
                }
            }
            else
            {
                if (name == "teacher" && pwd == "teacher")
                {
                    MessageBox.Show("老师登陆成功");
                }
                else
                {
                    MessageBox.Show("登录失败");
                    txtName.Clear();
                    txtPwd.Clear();
                    txtName.Focus();
                }
            }

        }
        //都没有选
        else
        {
            MessageBox.Show("选择登录身份");
        }
    }
}

11、MDI窗体的设计

1、首先确定一个父窗体。 将IsMdiContainer设置为true。
2、创建子窗体,并且设置他们的父窗体。
在这里插入图片描述

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.MdiParent = this;
        frm2.Show();
        Form3 frm3 = new Form3();
        frm3.MdiParent = this;
        frm3.Show();
        Form4 frm4 = new Form4();
        frm4.MdiParent = this;
        frm4.Show();
    }

    private void 横向排列ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        LayoutMdi(MdiLayout.TileHorizontal);
    }

    private void 纵向排列ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        LayoutMdi(MdiLayout.TileVertical);
    }
}

12、PictureBox

在这里插入图片描述

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    //获得指定文件夹的所有文件的全路径
    string[] path = Directory.GetFiles(@"D:\示例图片");
    int i = 0;
    private void Form1_Load(object sender, EventArgs e)
    { 
        pictureBox1.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");                     
    }
    /// <summary>
    /// 点击更换下一张图片
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button2_Click(object sender, EventArgs e)
    {            
        i++;
        if (i == path.Length) 
        {
            i = 0;
        }
        pictureBox1.Image = Image.FromFile(path[i]);
    }
    /// <summary>
    /// 点击上一张
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button1_Click(object sender, EventArgs e)
    {
        i--;
        if (i < 0) 
        {
            i = path.Length - 1;
        }
        pictureBox1.Image = Image.FromFile(path[i]);
    }
}

13、PictureBox和计时器

在这里插入图片描述

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    string[] path = Directory.GetFiles(@"D:\示例图片");
    int i = 0;
    Random r = new Random();
    private void Form1_Load(object sender, EventArgs e)
    {
        播放音乐
        //SoundPlayer sp = new SoundPlayer();
        ‪E:\音乐\下载\顺其自然 - 黄小琥.flac
        //sp.SoundLocation = @"E:\音乐\下载\顺其自然 - 黄小琥.flac";
        //sp.Play();
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox5.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox6.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox1.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");
        pictureBox2.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");
        pictureBox3.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");
        pictureBox4.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");
        pictureBox5.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");
        pictureBox6.Image = Image.FromFile(@"D:\示例图片\04197_720.jpg");
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        //每隔一秒钟换一张图片
        i++;
        if (i == path.Length) 
        {
            i = 0;
        }
        pictureBox1.Image = Image.FromFile(path[r.Next(0, path.Length)]);
        pictureBox2.Image = Image.FromFile(path[r.Next(0, path.Length)]);
        pictureBox3.Image = Image.FromFile(path[r.Next(0, path.Length)]);
        pictureBox4.Image = Image.FromFile(path[r.Next(0, path.Length)]);
        pictureBox5.Image = Image.FromFile(path[r.Next(0, path.Length)]);
        pictureBox6.Image = Image.FromFile(path[r.Next(0, path.Length)]);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值