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)]);
}
}