字符串的方法
创建一个计时器记录程序运行的时间
string str = null;
//创建计时器
Stopwatch sw = new Stopwatch();
sw.Start();//开始计时
for (int i = 0; i < 10000; i++)
{
str += i;
}
sw.Stop();//结束计时
Console.WriteLine(sw.Elapsed);
Console.ReadKey();
00:00:00.0384006
StringBuilder sb = new StringBuilder();
string str = null;
//创建计时器
Stopwatch sw = new Stopwatch();
sw.Start();//开始计时
for (int i = 0; i < 10000; i++)
{
sb.Append(i);
}
sw.Stop();//结束计时
Console.WriteLine(sw.Elapsed);
Console.ReadKey();
00:00:00.0015112
第一个string要在内存中开空间,StringBuilder不用开空间,程序运行速度会块很多
使用Equals比较,可以自行选择比较标准(以下是比较字符串忽略大小写)
lesson1.Equals(lesson2,StringComparison.OrdinalIgnoreCase)
split() 分割,返回数组
从日期字符串("2008-08-08")中分析出年月日
string s = "2008-08-08";
char[] chs = { '-' };
string[] data = s.Split(chs, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("{0}年{1}月{2}日", data[0], data[1], data[2]);
Console.ReadKey();
bool Contains(string value) 判断字符串中是否含有字串value,返回一个bool类型的值
string str = "ff是猪";
if (str.Contains("ff"))
{
str = str.Replace("ff", "李昉");
}
Console.WriteLine(str);
Console.ReadKey();
substring() 截取
可以选择开始截取,截取长度
string str = "李昉是猪";
str = str.Substring(1,2);
Console.WriteLine(str);
其他常用
bool StartsWith (string value) //判断是否以value开始
bool EndsWith (string value) //判断是否以value结束
int index = str.IndexOf('是'); //找‘是’第一次出现的位置
练习
string str = "hello c sharp";
char[] chs = { ' ' };
string[] str1 = str.Split(chs, StringSplitOptions.RemoveEmptyEntries);
//数组倒序
for (int i = 0; i < str1.Length/2; i++)
{
string temp = str1[i];
str1[i] = str1[str1.Length-1-i];
str1[str1.Length -1-i] = temp;
}
//输出数组
for (int i = 0; i < str1.Length; i++)
{
Console.WriteLine(str1[i]);
}
Console.ReadKey();
继承
写下面三个类
public class Student
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age {
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
public void CH()
{
Console.WriteLine("gasgy");
}
public void Learn()
{
Console.WriteLine("学生学习");
}
}
public class Teacher
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
private double _salary;
public double Salary
{
get { return _salary; }
set { _salary = value; }
}
public void Teach()
{
Console.WriteLine("讲课");
}
}
public class Driver
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
public void Drive()
{
Console.WriteLine("开车");
}
}
可以发现出现了大量的冗余。这时候就可以用继承,把这三个类中重复的成员拿出来单独封装成一个类,作为这几个类的父类
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
}
public class Student:Person
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
public void CH()
{
Console.WriteLine("gasgy");
}
public void Learn()
{
Console.WriteLine("学生学习");
}
}
public class Teacher:Person
{
private double _salary;
public double Salary
{
get { return _salary; }
set { _salary = value; }
}
public void Teach()
{
Console.WriteLine("讲课");
}
}
public class Driver:Person
{
public void Drive()
{
Console.WriteLine("开车");
}
}
我们又创建一个类Person,把公共的成员写在Person中,再继承可以简化程序。、
这个Person就是父类。私有字段(private)不能继承,只能继承公有字段(public)
集合
集合是很多个数据的集合,集合的好处:长度可以任意改变,类型随便
数组:长度不可变,类型单一
当我们把一个对象输出到控制台时,默认情况下打印的是命名空间
ArrayList list = new ArrayList();
list.Add(true);
list.Add(1);
list.Add("张三");
list.AddRange(new int[] { 1, 2, 3, 45, 5 }); //添加集合用AddRange
list.Clear(); //清空所有元素
list.Remove(true); //删除哪个元素
list.RemoveAt(0); //根据下标删除元素
list.RemoveRange(0, 3); //根据下标删除一定范围中的元素
list.Sort(); //升序排列
list.Reverse(); //反转
list.Insert(1, "插入的"); //在指定位置插入元素
list.InsertRange(0, new string[] { "张三", "李四" }); //在指定位置插入集合
bool b = list.Contains(1); //判断是否包含某个元素
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
集合中的元素都是object型,在使用时,我们需要转换
ArrayList list = new ArrayList();
list.AddRange(new int[] { 1, 23, 5, 6, 7 });
int sum = 0;
int max = (int)list[0];
for (int i = 0; i < list.Count; i++)
{
sum = sum + (int)list[i]; //将object类型转换为int类型
if ((int)list[i] > max)
{
max = (int)list[i];
}
}
Console.WriteLine(max);
Console.WriteLine(sum);
随机产生10个不重复数(1—10)
ArrayList list = new ArrayList();
Random r = new Random();
for (int i = 0; i < 10; i++)
{
int rNumber = r.Next(0, 10);
if (!list.Contains(rNumber))
{
list.Add(rNumber);
}
else
{
//一旦产生重复数
i--;
}
}
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
文件操作
//创建文件
File.Create(@"C:\Users\xiaomi\Desktop\new.txt");
//删除文件
File.Delete(@"C:\Users\xiaomi\Desktop\new.txt");
//复制一个文件
File.Copy(@"C:\Users\xiaomi\Desktop\new.txt", @"C:\Users\xiaomi\Desktop\new1.txt");
桌面应用程序
每次拖动控件的过程就是创建控件对象的过程
this.Close(); //关闭当前窗口
//调用窗口2
Form2 form2 = new Form2();
form2.Show();
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("我去你妈的");
this.Close();
}
private void button2_MouseEnter(object sender, EventArgs e)
{
//活动的宽度就是窗体的宽度减去按钮的宽度
int x = this.ClientSize.Width - button2.Width;
int y = this.ClientSize.Height - button2.Height;
Random r = new Random();
//随机给button一个新的坐标
button2.Location = new Point(r.Next(0, x+1), r.Next(0, y+1));
}
指定在21:30播放音乐(简易闹钟)
lblTme.Text = DateTime.Now.ToString();
if (DateTime.Now.Hour ==21 && DateTime.Now.Minute ==30)
{
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = @"";//放置音乐路径
sp.Play();
}
简易登录页面
private void button1_Click(object sender, EventArgs e)
{
if (ButtonStudent.Checked || ButtonTeacher.Checked)
{
string name = textName.Text.Trim();
string pwb = textPwb.Text.Trim();
if (ButtonStudent.Checked) //表示被选中
{
if (name == "Student" && pwb == "Student")
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("登录失败");
textPwb.Clear();
textName.Clear();
textName.Focus();
}
}
else
{
if (name == "Teacher" && pwb == "Teacher")
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("登陆失败");
textPwb.Clear();
textName.Clear();
textName.Focus();
}
}
}
else
{
MessageBox.Show("请选择登陆方式");
}
}
MDI窗体设计
子窗体都在父窗体中,并且无论怎么拖拽都不会出父窗体
设置主窗体
private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.MdiParent = this;
form2.Show();
Form3 form3 = new Form3();
form3.MdiParent = this;
form3.Show();
}
private void 横向排列ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal); //横向排列
}
private void 纵向排列ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical); //纵向排列
}
效果如图
实现图片的翻页效果
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\xiaomi\Desktop\tupian (2)\4.jpg");
//获得指定文件夹所有文件的路径
}
int i = 0;
string[] Path = Directory.GetFiles(@"C:\Users\xiaomi\Desktop\tupian (2)");
/// <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]);
}
}