1、MD5加密
MD5加密是不能夠逆的,只能將字符串轉爲MD5值,不能將MD5值轉回字符串。小程序
static void Main(string[] args) { //202cb962ac59075b964b07152d234b70 //202cb962ac5975b964b7152d234b70 ToString x參數 //202cb962ac59075b964b07152d234b70 ToString x2參數 // 3244185981728979115075721453575112 ToString 沒加參數 //ToString參數須要到百度拿來用 string s = GetMD5("123"); Console.WriteLine(s); Console.ReadKey(); } public static string GetMD5(string str) { //建立MD5對象 MD5 md5 = MD5.Create(); //開始加密 //須要將字符串轉爲字節數組 byte[] buffer = Encoding.Default.GetBytes(str); //返回一個加密好的字節數組 byte[] MD5Buffer = md5.ComputeHash(buffer); //將字節數組轉換成字符串 //字節數組---字符串 //1.將字節數組中每一個元素按照自定的編碼格式解析成字符串 //2.直接將數組ToString(); //3.將字節數組中的每一個元素ToString() // return Encoding.Default.GetString(MD5Buffer); string strNew = " "; for (int i = 0; i < MD5Buffer.Length; i++) { //ToString("x") 加x參數將十進制轉爲十六進制,屬於ToString的方法 strNew += MD5Buffer[i].ToString("x2"); } return strNew; } }
2、Winform應用程序簡介
是一種智能客戶端技術,咱們可使用winform應用程序幫助咱們得到信息或者傳輸信息等。數組
屬性
Name:在後臺要得到前臺的控件對象,須要使用Name屬性
Anchor:控件位置固定
BackColor:控件背景(顏色,背景圖等)
ContextMenuStrip:右鍵菜單 配合工具欄的 菜單和工具欄 內的ContextMenuStrip使用
Cursor:光標樣子
Enabled:設置控件是否可用
Visible:設置控件是否可見
FlatStyle:設置控件外觀
Font:字體dom
事件:發生一件事情。
註冊事件:雙擊控件註冊的都是控件默認被選中的那個事件
觸發事件:點擊後觸發的事情ide
在Main函數當中建立的窗體對象,稱之爲這個窗體應用程序的主窗體。也就意味着,當主窗體被關閉時,整個應用程序都被關閉函數
經過靜態類來共有
窗體1的按鈕彈出窗體2,窗體2的按鈕彈出窗體3,窗體3的按鈕關閉全部窗體(實際窗體3就是調用的窗體1)工具
Form1 的代碼以下佈局
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); frm2.Show(); } /// <summary> /// 當加載窗體的時候,將窗體對象放到Test類中的靜態字段中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { Test._fr1Test = this; } } }
窗體2的代碼以下字體
public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form3 frm3 = new Form3(); frm3.Show(); } }
經過一個靜態類來達到共有窗體1this
namespace WindowsFormsApplication1 { public static class Test { public static Form1 _fr1Test; } }
窗體3的代碼以下編碼
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) { //須要得到當前主窗體的對象 Test._fr1Test.Close(); } private void Form3_Load(object sender, EventArgs e) { } }
鼠標點不到按鈕,MouseEnter事件
代碼以下
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary> /// 當鼠標進入按鈕的可見部分的時候,給按鈕一個新的座標 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void noLove_MouseEnter(object sender, EventArgs e) { //給按鈕一個新的座標 //按鈕活動的最大寬度就是 窗體的寬度減去按鈕的寬度(按鈕能活動的範圍) int x = this.ClientSize.Width - bthLove.Width; int y = this.ClientSize.Height - bthLove.Height; Random r = new Random(); //要給按鈕一個隨機的座標 noLove.Location = new Point(r.Next(0,x+1),r.Next(0,y+1)); } private void bthLove_Click(object sender, EventArgs e) { MessageBox.Show("我也愛你喲,思密達"); this.Close(); } private void noLove_Click(object sender, EventArgs e) { MessageBox.Show("仍是被你這個屌絲點到了"); this.Close(); } }
3、TextBox控件和Label控件(Label控件就是用來顯示文本的)
屬性
WoreWrap:換行
ScrollBars:是否顯示滾動條
PasswordChar:密碼框那個*號的東西
事件:TextChanged:當文本框中的內容改變時觸發這個事件
代碼示例以下
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary> /// 當文本框中的內容發生改變的時候,將值賦值給Label /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void textWords_TextChanged(object sender, EventArgs e) { lbl.Text = textWords.Text; } }
跑馬燈練習(Timer的用法)
指定事件發生的頻率,在指定的時間間隔內作一件指定的事情
代碼以下
private void timer1_Tick(object sender, EventArgs e) { //截取字符串abcde //label1.Text拿到字符串,label1.Text.Substring(1)截取bcde //label1.Text.Substring(0, 1) 截取a,放到bcde後面 label1.Text = label1.Text.Substring(1)+ label1.Text.Substring(0, 1); }
簡單記事本(textBox)
所需屬性
WordWrap:指示多行編輯控件是否自動換行
Visible:可見屬性包含兩個值
True使用此選項-文本框在父控件窗體上可見
False 使用此方法-文本框能夠隱藏在父控件窗體上
TextBox.Text.Trim():接收用戶輸入,不能接收用戶輸入的空格(開頭和結尾的空格)
TextBox.Focus :爲文本框設置焦點
因爲這個記事本有登錄功能,都在一個FORM上,因此在登錄時候須要隱藏掉一些按鈕及須要隱藏的內容,爲整個Form1設置Load屬性
private void Form1_Load(object sender, EventArgs e) { //第一步:因爲這個記事本有登錄功能,都在一個FORM上,因此在登錄時候須要隱藏掉一些按鈕及須要隱藏的內容 //txtWords.WordWrap = false; btnSave.Visible = false; btnWordWrap.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.Trim(); //判斷用戶名和密碼是否正確,正確或者錯誤該乾的事 if (name == "admin" && pwd == "admin") { MessageBox.Show("歡迎進入記事本"); //若是成功將第二個界面隱藏了的該出現的放出來,第一界面該隱藏的隱藏掉 txtWords.Visible = true; btnWordWrap.Visible = true; btnSave.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(); } }
開始作重置按鈕,重置按鈕需觸發清空兩個文本框及焦點在name文本框的焦點
/// <summary> /// 爲重置按鈕註冊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRest_Click(object sender, EventArgs e) { //重置按鈕需觸發清空兩個文本框及焦點在name文本框的焦點 txtName.Clear(); txtPwd.Clear(); txtName.Focus(); }
如今第一個界面及登錄、重置的功能完成,開始作第二界面換行切換,保存。
換行按鈕註冊事件
/// <summary> /// 自動換行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnWordWrap_Click(object sender, EventArgs e) { //判斷當前是否自動換行 //txtWors.WordWrap = true; //取消自動換行 if (btnWordWrap.Text == "自動換行") { //取消自動換行 txtWords.WordWrap = true; btnWordWrap.Text = "取消自動換行"; } else if (btnWordWrap.Text == "取消自動換行") { txtWords.WordWrap = false; btnWordWrap.Text = "自動換行"; } }
保存文本到指定的路勁下,爲保存按鈕註冊事件
/// <summary> /// 將文本保存到指定位置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { using (FileStream fsWrite = new FileStream("new.txt", 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("保存成功"); }
4、單選和多選
公共空間裏面的:checkBox(多選) radioButton(單選)
checkBox:多選框Checked屬性默認是否選中
radioButton:單選有一個問題,一個窗體中不管有多少單選只能選一個,這樣若是一個窗體中既有性別選擇,又有婚姻關係選擇就不能實現。這時候最簡單的辦法就是給單選框分組。
分組:容器--GroupBox
單選和多選的登陸練習
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnLogon_Click(object sender, EventArgs e) { if (radStudent.Checked || radTeachar.Checked) { string name = textName.Text.Trim(); string pwd = textPwd.Text.Trim(); //判斷是學生登陸仍是老師 if (radStudent.Checked) { if (name == "student" && pwd == "student") { MessageBox.Show("登陸成功"); } else { MessageBox.Show("登陸失敗"); textName.Clear(); textPwd.Clear(); textName.Focus(); } } else { if (name == "teachar" && pwd == "teachar") { MessageBox.Show("登陸成功"); } else { MessageBox.Show("登陸失敗"); textName.Clear(); textPwd.Clear(); textName.Focus(); } } } else { MessageBox.Show("請先選學生或者老師"); } } }
5、MDI窗體的設計
frm4.MdiParent :標記子窗體屬於父窗體
LayoutMdi():橫縱向排列
一、首選肯定一個父窗體(新建父窗體)
二、新建須要的子窗體,能夠在父窗體中排列(新建對應數量的子窗體)
三、標記父窗體,窗體屬性:IsMdiContainer設置爲true
四、在父窗口上放菜單欄:菜單和工具,MenuStrip
五、建立子窗體,而且設置他們的父窗體 frm4.MdiParent
六、針對子窗體作橫向排列 LayoutMdi(MdiLayout.TileHorizontal);
七、針對子窗體作縱向排列 LayoutMdi(MdiLayout.TileVertical);
代碼以下
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); } }
6、圖片(pictureBox)
屬性
SizeMode:處理圖像的位置
得到指定文件夾的全部文件的全路徑
string[] path = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Poth");
上一張和下一張圖片切換的練習
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) { //設置圖片顯示佈局 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; //初始顯示的圖片 pictureBox1.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\Poth\30536870.JPG"); } int i = 0; //得到指定文件夾的全部文件的全路徑 string[] path = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Poth"); /// <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]); } }
pictureBox和Timer的小程序
實現多圖自動切換,並播放音樂
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //播放音樂 SoundPlayer sp = new SoundPlayer(); sp.SoundLocation = @"C:\Users\Administrator\Desktop\Poth\fire4-1.wav"; sp.Play(); //設置圖片顯示的佈局 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage; //窗體加載的時候給每個PictyreBox都加載一張圖片 pictureBox1.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\Poth\30536870.JPG"); pictureBox2.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\Poth\30536870.JPG"); pictureBox3.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\Poth\30536870.JPG"); pictureBox4.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\Poth\30536870.JPG"); } //拿到圖片文件夾路徑放到數組裏面 string[] path = System.IO.Directory.GetFiles(@"C:\Users\Administrator\Desktop\Poth"); //圖片起始的播放位置 int i = 0; Random r = new Random(); private void timer1_Tick(object sender, EventArgs e) { //讓圖片下一張播放 i++; //判斷圖片文件夾裏面的數組索引,超過了最大索引就將i變爲第一張圖片 if (i == path.Length) { i = 0; } //給pictureBox賦值 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)]); } }