OpenFileDialog
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//定义一个文件打开控件
OpenFileDialog ofd = new OpenFileDialog();
//设置打开对话框的初始目录,默认目录为exe运行文件所在的路径
ofd.InitialDirectory = Application.StartupPath;
//设置打开对话框的标题
ofd.Title = "请选择要打开的文件";
//设置打开对话框可以多选
ofd.Multiselect = false;
//设置对话框打开的文件类型
ofd.Filter = "文本文件|*.txt|音频文件|*.wav|图片文件|*.jpg|所有文件|*.*";
//设置对话框是否记忆之前打开的目录
ofd.RestoreDirectory = false;
if (ofd.ShowDialog() == DialogResult.OK)
{
string reg1 = @"jpg$|png$";
string reg2 = @"txt$";
//获取用户选择的文件完整路径
string filePath = ofd.FileName;
Console.WriteLine(filePath);
if (Regex.IsMatch(filePath, reg1))
{
//图片显示
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; //使图像拉伸或收缩,以适合PictureBox
this.pictureBox1.ImageLocation = filePath;
}
else if (Regex.IsMatch(filePath, reg2))
{
Console.WriteLine(File.ReadAllText(filePath));
}
}
}
正则表达式
//什么是正则表达式?
//1.正则表达式(Regular Expression)是一种文本模式,
//包括普通字符(如,a - z,A - Z,0 - 9等)和特殊字符(如:+,?,*等)。
//2.正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
//3.正则表达式使用场景: 比如 登录 注册 验证邮箱 验证电话 验证密码等
// 2.正则表达式基本使用
// (1) ^和$边界符 ^匹配开头 $匹配结尾
string reg2 = @"^abc"; //匹配字符串是不是以abc开头
string reg3 = @"abc$"; //匹配字符串是不是以abc结尾
// (2)[]字符集 [] 表示一系列的字符可被匹配,只要匹配其中一个就可以
var reg4 = @"^[0-9]"; //匹配开头为数字的字符串
var reg5 = @"^[a-z]"; //匹配开头为小写字母的字符串
var reg6 = @"^[A-Z]"; //匹配开头为大写字母的字符串
var reg7 = @"^[A-Za-z0-9] "; //匹配开头为字母或者是数字的字符串
//(3)^出现在[]内部 代表取反的意思
var reg8 = @"^[^0-9]"; //匹配开头不为数字的字符串
// (4) + 匹配前面的子表达式一次或多次。
// 例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}
var reg9 = @"zo+";
// 6.* 匹配前面的子表达式0次或者多次
// 例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
var reg10 = @"zo*";
// 7. ?匹配前面的子表达式0次或者一次
// 例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。
var reg11 = @"do(es)?";
//8. | 表示或 匹配其中的一个或多个
var reg12 = @"你好|他好|她好";
//9.{} 限定{}前面字符出现的次数
// {6} 6次
// {6,8} 6-8次
// {6,} 至少6次
// \d 代表数字 类似 [0-9]
var reg13 = @"^\d{6}"; //匹配开头6位都为数字的字符串
string input = "cdabcdefghijkabc";
string pattern = "bci";
string replacement = "PP";
var reg222 = @"^abc";
// 检查是否匹配
bool isMatch = Regex.IsMatch(input, reg4);
Console.WriteLine("是否存在" + isMatch);
替换字符串中的匹配部分
//string result = Regex.Replace(input, pattern, replacement);
//Console.WriteLine("替换结果 " + result);
获取所有匹配
//MatchCollection matches = Regex.Matches(input, pattern);
//foreach (Match match in matches)
//{
// Console.WriteLine("Found 'ai' at position " + match.Index);
//}
使用模式分割字符串
//string[] parts = Regex.Split(input, pattern);
//foreach (string part in parts)
//{
// Console.WriteLine(part);
//}
Invoke
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//任务繁重考虑使用多线程编程
//(再短时间内无法正常执行完的逻辑 --for --网络延迟)
//再使用多线程编程后,因为所有UI渲染过程都在主线成完成
//但是事件响应函数时,不一定在主线程,
//所以你在不确定的线程中修改 UI 可能会引起错误
private void button1_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
Thread.Sleep(1000);
Console.WriteLine("下载10%");
Thread.Sleep(1000);
Console.WriteLine("下载30%");
Thread.Sleep(1000);
Console.WriteLine("下载40%");
Thread.Sleep(1000);
Console.WriteLine("下载60%");
Thread.Sleep(1000);
Console.WriteLine("下载80%");
Thread.Sleep(1000);
Console.WriteLine("下载100%");
button.Text = "下载完毕";
}
//Invoke方法的作用 在委托事件中 调用刷新UI操作时
//去寻找主线程 刷新UI 保证UI刷新在主线程中完成
//Invoke方法需要创建一个委托。可以事先写好函数和与之对应的委托
private void button2_Click(object sender, EventArgs e)
{
Task.Run(() =>
{ //繁重的任务
Thread.Sleep(1000);
Console.WriteLine("下载10%");
Thread.Sleep(1000);
Console.WriteLine("下载30%");
Thread.Sleep(1000);
Console.WriteLine("下载40%");
Thread.Sleep(1000);
Console.WriteLine("下载60%");
Thread.Sleep(1000);
Console.WriteLine("下载80%");
Thread.Sleep(1000);
Console.WriteLine("下载100%");
//开启分线程执行繁重任务
string str = "下载完毕";
//使用Invoke 回到主线程 刷新UI
this.Invoke(new Action(delegate ()
{
//UI刷新内容
this.button2.Text = str;
}));
});
}
}
await
//同步
private void button2_Click(object sender, EventArgs e)
{
var tempTask = Task.Run(() =>
{
Thread.Sleep(1000);
Console.WriteLine("下载10%");
Thread.Sleep(1000);
Console.WriteLine("下载30%");
Thread.Sleep(1000);
Console.WriteLine("下载40%");
Thread.Sleep(1000);
Console.WriteLine("下载60%");
Thread.Sleep(1000);
Console.WriteLine("下载80%");
Thread.Sleep(1000);
Console.WriteLine("下载100%");
return "下载完成111";
});
richTextBox1.Text = tempTask.Result;
}
//异步
private async void button1_Click(object sender, EventArgs e)
{
var tempTask = Task.Run(() =>
{
Thread.Sleep(1000);
Console.WriteLine("下载10%");
Thread.Sleep(1000);
Console.WriteLine("下载30%");
Thread.Sleep(1000);
Console.WriteLine("下载40%");
Thread.Sleep(1000);
Console.WriteLine("下载60%");
Thread.Sleep(1000);
Console.WriteLine("下载80%");
Thread.Sleep(1000);
Console.WriteLine("下载100%");
return "下载完成";
});
string a = await tempTask;
richTextBox1.Text = a;
}
}