C# WinForm基础二 控件、对话框类、容器、进程、线程
来源:互联网 发布:java实现视频播放 编辑:程序博客网 时间:2024/05/21 22:59
一、WebBrowser 浏览器控件 (嵌入浏览器)
1、拖入窗体中,点击右上角三角符号,取消在父容器的停靠,就可以编辑大小了
2、重要的属性:Url
在”访问“控件点击事件里添加语句:
webBrowser1.Url = new Uri("http://"+ textBox1.Text);就可以访问textBox中输入的网页
二、ComboBox 下拉框
添加项语句:ComboBox1.Item.Add(“”);
它还有一个选择事件:SelectedIndexChanged
三、ListBox 列表框
添加项语句与ComboBox一样
重要事件为:鼠标双击事件(DoubleClicked)
四、小游戏:石头剪刀布
将三种出拳结果模拟成数字,便于计算判断输赢; 石头:1 剪刀 :2 布:3
新建三个类:玩家、电脑、裁判
玩家类有一个方法:接收点击的控件内容,返回一个模拟数字
电脑类有一个电脑出拳属性、还有一个产生随机数的方法,方法中还包括判断随机数,给属性赋值,并返回随机数字
裁判类因不需要实例化,写成静态类,直接调用。定义一个枚举{玩家赢,电脑赢,平手}储存结果,写一个方法,
传入前面两个两步返回的模拟数字,判断输赢,将各自结果返回,返回值是枚举类型
将得到的结果用ToString()方法得到字符串结果
五、打开对话框和保存对话框
打开对话框类:
//打开文件对话框 OpenFileDialog openFile = new OpenFileDialog(); openFile.Title = "请选择要打开的文件"; //对话框标题 openFile.Multiselect = true; //设置对话框可以多选 openFile.InitialDirectory = @"C:\Users\tufeiax\Desktop";//获取对话框的初始目录 openFile.Filter = "文本文件|*.txt|图片文件|*.jdg|所有文件|*.*"; openFile.ShowDialog(); try { //获取对话框选择的文件和路径 string path = openFile.FileName; //创建文件操作对象 using (FileStream fsRead = new FileStream(path, FileMode.Open, FileAccess.Read)) { byte[] buffer = new byte[1024 * 1024 * 5]; //实际读取的字节数 int r = fsRead.Read(buffer, 0, buffer.Length); textBox1.Text = Encoding.Default.GetString(buffer); } } catch (Exception) { return; }
保存对话框类:
SaveFileDialog save = new SaveFileDialog(); save.Title = "请选择要保存的路径"; save.InitialDirectory = @"C:\Users\tufeiax\Desktop"; save.Filter = "文本文件|*.txt|图片文件|*.jdg|所有文件|*.*"; save.ShowDialog(); string path = save.FileName; try { using(FileStream fsWrite = new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write)) { byte[] buffer = Encoding.Default.GetBytes(textBox1.Text); fsWrite.Write(buffer,0,buffer.Length); } } catch (Exception) { return; } MessageBox.Show("保存成功!");
六、字体对话框和颜色对话框:
//创建字体对话框对象 FontDialog font = new FontDialog(); font.ShowDialog(); textBox1.Font = font.Font;
//创建颜色对话框对象 ColorDialog cl = new ColorDialog(); cl.ShowDialog(); textBox1.ForeColor = cl.Color;
七、Panel容器
统一控制一堆控件是否可见。重要属性:Visible。设置不可见,那么Panel容器内的所有控件都会被隐藏
八、进程类 Process
//获得程序中所有正在运行的进程 Process[] pros = Process.GetProcesses(); foreach (var item in pros) { //item.Kill(); //关掉所欲进程 Console.WriteLine(item); } //通过进程打开一些应用程序 Process.Start("calc"); Process.Start("mspaint"); Process.Start("notepad"); Process.Start("iexplore", "http://www.baidu.com");
//通过进程打开指定的文件 //1.创建进程对象 Process p = new Process(); //配置要打的文件 p.StartInfo = new ProcessStartInfo(@"C:\Users\tufeiax\Desktop\学习C#数据库编程的问题.txt"); p.Start(); //打开
九、线程类
1、为什么要用多线程:单线程会造成程序假死
1)、可以让计算机“同时”做多件事情,节约时间
2)、后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况
3)、获得当前线程和当前进程
2、创建线程:比如有一个很复杂的方法test()
//创建一个线程去执行方法 Thread th = new Thread(Test);
th.Start(); //标记这个线程准备就绪,随时可以被执行,CPU会自行空闲时执行
前台线程:只有所有的前台线程关闭才能完成程序关闭
后台线程:只要所有的前台线程结束,后台线程自动结束
将以上自己创建的线程设置为后台线程:
th.IsBackground = true; //是否设置为后台线程
4、跨线程访问:
新建的线程要访问主线程中创建的控件。会报异常 ,报错原因:.Net下不允许跨线程访问
但可以取消跨线程异常捕获:
在加载窗体事件里写入如下代码:
//取消跨线程访问检验 Control.CheckForIllegalCrossThreadCalls = false;
5、跨线程访问时,释放资源的异常
在关闭窗体时,有时自己建的线程还未结束,依然在调用主线程的控件,会导致主线程控件资源无法释放的异常
这时需要在窗体关闭事件里手动关闭线程:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //关闭窗体时,判断新线程是否为null,如果不为null,手动关闭 if (th != null) th.Abort(); }6、线程的静态方法:Sleep ---控制线程休眠等待
Thread.Sleep(3000); Console.WriteLine("Hello World"); Console.ReadKey();
7、如果新建的线程要执行的方法是有参数的,那这个参数必须是object类型的,并且参数传入是在Start方法传入
private void Test(object s) { } private void button1_Click(object sender, EventArgs e) { Thread th = new Thread(Test); th.IsBackground = true; th.Start("123"); //传入参数在此处 }8、线程练习:摇奖机
1)先写一个方法,实现三个label循环随机赋值:
private void PlayGame() { Random r = new Random(); while(b) { label1.Text = r.Next(0, 10).ToString(); label2.Text = r.Next(0, 10).ToString(); label3.Text = r.Next(0, 10).ToString(); } }2)设定控件是否是开始摇奖的bool变量初值:
bool b = false;然后在按钮点击事件中判断是开始还是停止,开始则用新建线程调用摇奖方法,停止,则不调用,数字停止:
if(b==false) //进来时是false,第一次点击按钮时执行 { btnStart.Text = "停止"; b = true; Thread th = new Thread(PlayGame); th.IsBackground = true; th.Start(); } else // b=true 第二次点击按钮时执行 { btnStart.Text = "开始"; b = false; }3)窗体加载时给一个跨线程访问控件检查设置为否:
Control.CheckForIllegalCrossThreadCalls = false;
- C# WinForm基础二 控件、对话框类、容器、进程、线程
- C# WinForm控件(二)
- Winform控件系列之二:对话框控件
- C#跨线程访问WinForm控件
- c# winform中子线程操作控件
- C# WinForm 跨线程访问控件
- C#基础 之 WinForm控件介绍
- WinForm界面开发论(二)容器控件论
- C# winform 确认对话框
- C#之WinForm基础 更改打开文件对话框的标题
- C#之WinForm基础 设置保存文件对话框的文件类型
- WinForm基础控件--选择类控件
- WinForm基础控件--分组类控件
- WinForm控件基础--菜单类控件
- C# winForm基础一 基础控件、属性、事件
- C#中的线程(二) 线程同步基础
- C#中的线程(二) 线程同步基础
- C#中的线程(二) 线程同步基础
- ROS Service vs Topic
- 通俗易懂的动态规划
- Python字符串方法详细介绍3_变形
- 黑马程序员——先试试博客的要求
- spring4.1.2使用quartz2.2.1定时器
- C# WinForm基础二 控件、对话框类、容器、进程、线程
- 使用JAVA读写Properties属性文件
- POJ 2031 Building a Space Station
- shell 函数返回值接收问题
- 如何写好代码
- iOS开发 - 网络数据安全加密(MD5)
- LSF系统介绍
- java-MongoDB存入文件时奇怪的异常
- ContentProvider与ContentResolver使用