导航:首页 > 编程语言 > winform编程实例

winform编程实例

发布时间:2023-05-29 16:10:35

⑴ C# 在winform上绘制一个位图

可以再Form_Load
里激早雀面.但是必须先写一句明早
:
this.Show();
比如:
this.Show();
Graphics
g
=
Graphics.FromHwnd(this.Handle);
g.FillRectangle(System.Drawing.Brushes.Red,
0,
0,
506,
600);
类似这样,方可以
实现绘图睁宽了..

⑵ 跪求! C# WINFORM应用程序对Excel 文件 编辑创建的 代码实例

try
{
Excel.Application xls = new Excel.Application();
Excel.Workbook editBook = null;
Excel.Worksheet editSheet = null;
Excel.Workbooks excelBooks = (Excel.Workbooks)xls.Workbooks;
Workbook editBook = excelBooks.Open(excelPath, Type.Missing, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
editSheet = editBook.Sheets[1] as Excel.Worksheet;
Excel.Range targetCell = editSheet.get_Range("A1", "A1");
targetCell.Value2 = "要设定的值";
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(targetCell);
System.Runtime.InteropServices.Marshal.ReleaseComObject(editSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(editBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelBooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls);
}

⑶ C# winform动态创建多线程

1 private void Form1_Load(object sender, EventArgs e)
2 {
3 Thread newthread = new Thread(new ThreadStart(BackgroundProcess));
4 newthread.Start();
5
6 }
7
8 /// <summary>
9 /// 定义一个代理
10 /// </summary>
11 private delegate void CrossThreadOperationControl();
12
13 private void BackgroundProcess()
14 {
15 // 将代理实例化为一个匿名代理
16 CrossThreadOperationControl CrossDelete = delegate()
17 {
18 int i = 1;
19 while (i < 5)
20 {
21 // 向列表框增加一个项目
22 listBox1.Items.Add("Item " + i.ToString());
23 i++;
24 }
25 label1.Text = "我在新线程里访问这个lable!";
26 listBox1.Items.Add(label1.Text);
27 };
28 listBox1.Invoke(CrossDelete);
29 }

收集一下,在C# winform编程中多线程操作控件时,可以有下面种方法:
1. 又看到一种方法(2014.1.6):

1. 刚看到一种方法(2014.1.5):

1 private void btnTest_Click(object sender, EventArgs e)
2 {
3 if (this.txtIP.Text.Trim() != "" && this.txtPort.Text.Trim() != "")
4 {
5 string proxy = this.txtIP.Text.Trim() + ":" + this.txtPort.Text.Trim();
6 string result = string.Empty;
7 this.btnTest.Enabled = false;
8 new Thread(delegate
9 {
10 Stopwatch stopwatch = new Stopwatch();
11 stopwatch.Start();
12 HttpClient httpClient = new HttpClient();
13 httpClient.Proxy = new WebProxy(proxy);
14 httpClient.TimeOut = 2000;
15 object result;
16 try
17 {
18 string a = httpClient.Get("http://www..com", "", "", "", "", "get");
19 if (a != "")
20 {
21 result = "响应成功!";
22 }
23 else
24 {
25 result = "响应失败!";
26 }
27 }
28 catch
29 {
30 }
31 stopwatch.Stop();
32 result = result;
33 result = string.Concat(new object[]
34 {
35 result,
36 ",响应花费:",
37 stopwatch.ElapsedMilliseconds,
38 "ms"
39 });
40 this.BeginInvoke(delegate
41 {
42 this.lbResult.Text = result;
43 this.btnTest.Enabled = true;
44 });
45 })
46 {
47 IsBackground = true
48 }.Start();
49 }
50 else
51 {
52 this.lbResult.Text = "请输入完整再提交!";
53 }
54 }

1. 直接使用表达式和Action()

1 private void btnInitEnv_Click(object sender, EventArgs e)
2 {
3 //初始化环境时回显出来的文字不让看
4 try
5 {
6 this.textBoxOutPut.Clear();
7 this.btnInitEnv.Enabled = false;
8 this.labelStateInfo.Text = "";
9 this.labelStateInfo.ForeColor = Color.Red;
10
11 if (!WriteToSerialPort("diags"))
12 {
13 this.btnInitEnv.Enabled = true;
14 return;
15 }
16
17 Thread thread = new Thread(new ThreadStart(() =>
18 {
19 int i = 0;
20 bool flagFind = false;
21 StringBuilder sb = new StringBuilder();
22
23 while (true)
24 {
25 Thread.Sleep(300);
26 this.Invoke(new Action(() =>
27 {
28 sb.Append(this.textBoxOutPut.Text);
29 this.textBoxOutPut.Clear();
30 if (sb.ToString().Contains("Entering recovery mode, starting command prompt"))
31 {
32 this.textBoxOutPut.AppendText(string.Format(PubilcConstVar.TerimalStrFormat,
33 DateTime.Now.ToString(PubilcConstVar.TimeFormat),
34 "Entering recovery mode, starting command prompt, Stop.\r\n"));
35 this.labelStateInfo.ForeColor = Color.Red;
36 this.labelStateInfo.Text = "初始化失败,请手动输入命令初始化";
37 flagFind = true;
38 this.btnInitEnv.Enabled = true;
39 }
40 else if (sb.ToString().Contains(":-)"))
41 {
42 this.textBoxOutPut.AppendText(string.Format(PubilcConstVar.TerimalStrFormat,
43 DateTime.Now.ToString(PubilcConstVar.TimeFormat),
44 "进入操作模式成功\r\n"));
45 this.labelStateInfo.ForeColor = Color.Blue;
46 this.labelStateInfo.Text = "初始化成功";
47 flagFind = true;
48
49 //将业务按钮使能
50 EnableBussinessButtons();
51 }
52 }));
53
54 if (flagFind || ++i > 20) //找开标志或10秒超时中断
55 {
56 break;
57 }
58 }
59
60 if (!flagFind)
61 {
62 this.Invoke(new Action(() =>
63 {
64 this.textBoxOutPut.Clear();
65 this.labelStateInfo.ForeColor = Color.Red;
66 this.labelStateInfo.Text = "初始化失败,超时";
67 this.btnInitEnv.Enabled = true;
68
69 DisableBussinessButtons();
70 }));
71 }
72 }));
73
74 thread.IsBackground = true;
75 thread.Start();
76 }
77 catch (Exception ex)
78 {
79 this.log.Write(ex.ToString());
80 }
81 }

2. 使用线程函数加action()

1 private void btnInitEnv_Click(object sender, EventArgs e)
2 {
3 //初始化环境时回显出来的文字不让看
4 try
5 {
6 this.textBoxOutPut.Clear();
7 this.btnInitEnv.Enabled = false;
8 this.labelStateInfo.Text = "";
9 this.labelStateInfo.ForeColor = Color.Red;
10
11 if (!WriteToSerialPort("diags"))
12 {
13 this.btnInitEnv.Enabled = true;
14 return;
15 }
16
17 Thread thread = new Thread(new ThreadStart(MonitorOutPutThread));
18
19 thread.IsBackground = true;
20 thread.Start();
21 }
22 catch (Exception ex)
23 {
24 this.log.Write(ex.ToString());
25 }
26 }

线程函数:

1 private void MonitorOutPutThread()
2 {
3 int i = 0;
4 bool flagFind = false;
5 StringBuilder sb = new StringBuilder();
6
7 while (true)
8 {
9 Thread.Sleep(300);
10 this.Invoke(new Action(() =>
11 {
12 sb.Append(this.textBoxOutPut.Text);
13 this.textBoxOutPut.Clear();
14 if (sb.ToString().Contains("Entering recovery mode, starting command prompt"))
15 {
16 this.textBoxOutPut.AppendText(string.Format(PubilcConstVar.TerimalStrFormat,
17 DateTime.Now.ToString(PubilcConstVar.TimeFormat),
18 "Entering recovery mode, starting command prompt, Stop.\r\n"));
19 this.labelStateInfo.ForeColor = Color.Red;
20 this.labelStateInfo.Text = "初始化失败,请手动输入命令初始化";
21 flagFind = true;
22 this.btnInitEnv.Enabled = true;
23 }
24 else if (sb.ToString().Contains(":-)"))
25 {
26 this.textBoxOutPut.AppendText(string.Format(PubilcConstVar.TerimalStrFormat,
27 DateTime.Now.ToString(PubilcConstVar.TimeFormat),
28 "进入操作模式成功\r\n"));
29 this.labelStateInfo.ForeColor = Color.Blue;
30 this.labelStateInfo.Text = "初始化成功";
31 flagFind = true;
32
33 //将业务按钮使能
34 EnableBussinessButtons();
35 }
36 }));
37
38 if (flagFind || ++i > 20) //找开标志或10秒超时中断
39 {
40 break;
41 }
42 }
43
44 if (!flagFind)
45 {
46 this.Invoke(new Action(() =>
47 {
48 this.textBoxOutPut.Clear();
49 this.labelStateInfo.ForeColor = Color.Red;
50 this.labelStateInfo.Text = "初始化失败,超时";
51 this.btnInitEnv.Enabled = true;
52
53 DisableBussinessButtons();
54 }));
55 }
56 }

⑷ 求一个c#winform鼠标轮滚动即可弹窗的实例

在事件锋闷余中选择MouseWheel事件进行编辑
或在设计器代码中
this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);

然罩帆后实现方法
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
MessageBox.Show("test");
}

如果是其中的控件获得焦点则不可用,为此银滚目的可采用
this.Focos();
添加到某些控件的Enter事件中使窗体本身获得焦点

⑸ 可以给个强大的winform父子窗口实例吗.谢谢

1,首先,父窗口要设置isenablemdi属性。实现MDI结构的父子窗口套用,最重要的是在父窗口实例化自窗口(例frmForm),(名字好像有些错误)
FrmForm frmFom=new FrmForm();
frmForm.parent=this;
2,关于自窗口在父窗口中的自动排列,C#提供一个父窗口属性定义,(好像是mdiLayout),通过设置这个属性即可实现层叠、横向、纵向排列(大于三个子窗口时自动调稿誉核整为平均分配的窗口排列)。
3,我当时调的时候只用三个窗口,所以只看到横向或纵向排列的情况,不知道Vertical和H...在大于三个时可以均匀排布(如左边三个,右边三个)。于是就自己写了一个小算法,也实现了功能;
我的实现方法:
a,利用parentForm.width和parentForm.height以及可以确定的其它控件的大小,计算得到mdi窗口大小
b,根据mdi子窗口数量计算平均每个窗口的面积
c,从(0,0)开始逆序从上往下,从左到右处理每个窗口键掘的location,并把size设置为平均面积(最后查看的窗口在最前面)
这当中有几个细节
a,用arraylist 保存打开的mdi自窗口信息,方便管理和配置(如location,size配置,非常方便)
b,对于奇数个的情况,算平均时窗口数+1;虚亩给最中间的窗口的size*2,使其横向铺在最下面,面积为平均值的两倍

其实这些东西楼主经常去CSDN很容易就懂的,我的这个答案也是在CSDN上找的。

⑹ 关于 C#编写的WINFORM程序

Program.cs 一般不写代码,没特殊需要不写(本人还没碰到过要在program中写代码的)program只是个程序入口,完全有编译器生成,楼主可以不管
From是主要代码所在地。From分成三块,一块是界面编辑,一块是界面编辑代码,界面编辑代码一般也有编译器生成,在你进行界面操作的时候编译器会自动生成,在这里你也不要写代码,当然有特殊需要也是可以的。第三块就是form.cs,这里是你主要代码的地方,你添加的事件什么的都要写在这里。一般的话你双击form就会进去form.cs,同时会生成一个load事件,在这个事件里你可以进行一些初始化要做得事,其他就不一一说了,楼主自己体会啊。
在c#form1就是一个类,要用form就要new一个实例。当然在progrm中就有,在main中new了,这个你看下程序就知道了。
另外有一个功能的实现你要添加一个类,在这个类中尼也要写不少代码的,楼主开始做后一定会有体会的

⑺ 二、设计WinForm应用程序,实现用户登录信息判断,如下图所示。

如果你一个都不会的话你还是自己再慢慢研究。你所说的要求是编程的最低要求!一定要自己动手!给你一点思路:登录窗口:当点击登录时候判断textbox.text==“”;则提示不填写用户名(或密码)。注册窗口:有必要填写textbox.text不为空且用户名不重复,则点击“注册”即可注册成功并数据库插入该记录。其他的还是自己琢磨的好,VS对基本的这些功能实现是非常容易的!===================================================================下面给你一个完整的登录界面代码在VS2005.NET平台下用C#和Access实现用户登录界面的窗体应用程序一直就想加个technology的类别,但却迟迟未能动笔.一来坦游亮不得不承认直到现在,我在技术上还依然只是一个没怎么入门的菜鸟,二来技术本身也不是我的兴趣所在.但不管怎样,既然我现在还要攻读计算机专业磨轮的硕士学位,那么技术,总还是要学的.需要说明的是,对于那些高手来说,这里的东西想必都是小菜一碟,不值一提.我写在这里,只是给自己的总结吧.另外我所写的东西,很多也是参考网络和书籍的,其实真正属于我自己的东西也不多.由于四处查找,具体的出处很多也已记不清了,而且在开源环境下也很难说某些代码就是谁的原创,所以这里虽然没有说明,但很多东西也都是参考他人的,在此先要对那些给了我帮助的书籍作者,网上的发贴人和回贴人表示感谢.去年研一刚开学时,自己的实践能力还几乎为零.因为我心里清楚,自己本科的确是混过来的让宽,计算机科学与技术的学士学位,我其实是不配去拿的.九月十号进实验室后,开始学习项目组里需要用到的C#,但单纯学习语言也没什么明确的目的性.实验室里和我同一导师本校保研的同学和我说起,他们大四下学期刚进实验室时,师兄就让他们先试着写一个类似QQ登录那样的一个用户登录程序.我自己没有任何经验,想也就像他们一样,从这里起步吧,于是在看C#的同时我就考虑怎么样去实现这样一个程序了.我知道对于过来人来说,这样的一个程序实在是再简单不过了,但对于当时刚开始的我,着实费尽了不少周折.虽然后来基本实现了这样一个程序,但在数据库上还是有些问题.因此虽然当时也曾想过贴个technology类别的日志,但终究还是一直拖了下来.前段时间通过同学的介绍,帮沈阳日报的一个朋友做了一个会员管理的软件.软件本身也极其简单,基本没有太多的技术含量,但在开发的过程中自己通过各种渠道去查找资料,也在各方面都学到了很多.所以这段经历对我还是很有意义的.而且自己在计算机专业学了四年有半后终于可以自己做出来一些可以应用到实际中的东西,也终于凭借自己的专业能力获得了一点回报,无论回报是多是少.嗯,是要鼓励一下自己的.也激励自己再接再厉!此后我可能会把在这一软件中所学到的东西陆续总结一下到这里.而这一软件开发的第一个模块也就是用户登录模块.也就是我最初在尝试做的东西.好,说了这么多无关的话,现在言归正传,来看登录模块的具体实现.由于用户登录模块的实现关键的一点就是要将用户的信息存储在数据库中,并在用户登录时到数据库中对信息进行查找和核对,所以首先要先建立一个数据库.实际上对于初学者来说,数据库的相关操作也正是实现本登录模块的难点所在.这也是当时我刚开始写这段程序时困扰我并困扰了我很久的地方.在数据量不是很大的情况下,可以就用微软Office组件里的Access数据库,比较方便.这里在D盘用Access建立一个数据库命名为db.mdb,并在数据库中建一个表,命名为users,在表中建两个字段,命名为userName和userPassword,分别存储用户名和密码.然后在表中插入几条数据,用于登录界面的测试.下面是登录模块的开发.在VisualStudio2005的C#开发环境下,新建一个Windows应用程序的项目,将第一个窗体命名为Login,即作为用户登录窗体.在窗体上添加相应控件,设计效果如下:其中两个文本框分别命名为userNameTbx,pswTbx,用于接收用户输入的用户名和密码,两个按钮命名为loginBtn,cancleBtn,用于用户提交登录信息或取消以关闭登录框.将文本框pswTbx的PasswordChar属性设置为*或其它字符,这样用户在该文本框中键入字符时,界面显示的一律为*.然后在项目中添加一个Windows窗体,命名为MainForm,对于实际使用的软件来说,当用户登录成功后都应该弹出这样的软件主窗体.这里只是实现登录功能,暂不对主窗体添加任何内容.下面就是登录界面的后台实现,主要就是用户点击login按钮后后台事件响应代码的编写.登录窗体后台代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.OleDb;//添加Access数据库相关操作所需的引用namespaceLoginTest{publicpartialclassLogin:Form{publicLogin(){InitializeComponent();}privatevoidloginBtn_Click(objectsender,EventArgse){//用户点击loginBtn后事件响应的代码//用来连接Access数据库的字符串,@的作用是避免"\"等字符被当成转义符stringconStr=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\db.mdb";OleDbConnectioncon=newOleDbConnection(conStr);con.Open();stringcmdStr="select*fromuserswhereuserName='"+this.userNameTbx.Text+"'anserPassword='"+this.pswTbx.Text+"'";OleDbCommandcmd=newOleDbCommand(cmdStr,con);OleDbDataReaderreader=cmd.ExecuteReader();if(reader.Read())//如果找到用户信息,说明登录成功{MainFormnewForm=newMainForm();newForm.Show();//弹出主窗体this.Hide();//隐藏用户登录窗体}else{MessageBox.Show("用户名或密码错误!");}reader.Close();cmd.Connection.Close();con.Close();}privatevoidcancleBtn_Click(objectsender,EventArgse){this.Close();}}}以上代码调试通过后,即可成功运行.当输入数据库中正确的用户名和密码后点击login,则登录窗体关闭,主窗口弹出.大功告成!大功真的告成了吗?且慢.当在调试状态下启动软件,登录成功弹出主窗体后再关闭主窗体,从用户角度来说软件应该关闭了.但程序却还处在调试状态而没有结束运行.即使不在调试状态下,关闭主窗体后似乎软件已经关闭了,但实际上打开Windows任务管理器,发现登录窗体的线程还一直处在运行状态.这显然是不完善的.检查后发现在上面的代码中,弹出主窗体后只是将登录窗体隐藏了,this.Hide();而并没有真正关闭.好,那在弹出主窗体后就把登录窗体关闭吧.我们将this.Hide();改成this.Close();很简单吧.但很遗憾,事情并没有这么简单.这样改过之后我们再运行软件,发现登录成功之后登录窗体的确是实实在在的关闭了,但主窗体在闪了一下,甚至你可能连闪那一下都没看到,就也随之关闭了.这显然不是我们想要的结果.那如何能让登录窗体真正关闭,而又不影响主窗体的正常运行呢?这个问题也困扰了我了阵,当然还是很容易在网上找到了答案.实际上建立项目时登录窗体是第一个窗体,也就是默认的启动窗体,或者说是主进程,如果只将窗体隐藏,显然进程一直运行.而或将窗体关闭,也就是将主进程关闭,那整个软件自然也就关闭了,因此弹出的MainForm自然也会随之关闭.当然关于进程的问题我还有待进一步学习.要解决这个问题,就要找到应用程序的入口,看看整个程序的执行过程.打开项目中的program.cs文件,发现代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Windows.Forms;namespaceLoginTest{staticclassProgram{//////应用程序的主入口点。///[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.(false);Application.Run(newLogin());}}}要想解决上面的问题,就不能让程序直接执行Application.Run(newLogin());,而可做如下修改.staticvoidMain(){Application.EnableVisualStyles();Application.(false);//Application.Run(newLogin());Loginlogin=newLogin();if(login.ShowDialog()==DialogResult.OK){login.Close();Application.Run(newMainForm());}}首先实例化一个登录窗体,当登录成功时返回DialogResult.OK的结果,然后关闭登录窗体,将主窗体作为主线程启动.相应的,在登录界面的代码文件中做如下修改:if(reader.Read()){//MainFormnewForm=newMainForm();//newForm.Show();//this.Hide();this.DialogResult=DialogResult.OK;}至此,我们完成了一个最基本的用户登录模块的实现.最后,关于Access数据库有几点说明.第一,数据库文件的位置.其实数据库文件没必要放到或复制到项目文件中,而在进行数据库连接相关操作时直接使用其绝对路径即可.实际上在实际使用软件时,一般数据库文件也不会和软件的安装文件放在同一目录下的.最开始尝试写登录模块时,我就通过添加数据源什么的把数据库文件复试到了项目的Debug文件夹下,结果程序编译时会产生很多数据覆盖的问题,会有很多不必要的麻烦.另外一点就是Access数据库虽然用得着比较方便,但凡事有其两面性,Access数据库也有一些不利之处,影响比较明显的一点就是其可恶的关键字.这点也曾给我带来不少麻烦.由于很多关键字都是Access数据库保留的,因此在建表命名时如果一不小心和其重复了则对数据库操作时就会失败,而这一问题又很难发现,结果就是程序干调调不通却找不到原因所在.因此在使用Access数据库时命名一定要小心.附上转自网上的”真烂Access关键字”,如果操作Access数据库失败了可以先看一下是不是命名与下面这些关键字重复

⑻ C#Winform编程,怎样在一个窗口f1中调用另一个窗口f2 在f2中数据改变,在f1中相应的也改变

昨天也遇到了类似的问题,最后我的解液空尘决方法如下
在f2中写一个
public f1 F1;

在f1窗口中实例闹禅化f2的时候这样写
f2 F2 = new f2();
F2.F1 = this;
F2.ShowDialog();

当f2中数据改变时(假设改变的数据是在f2中是 int x; 在f1中是int y;)
F1.y = x;
这样就可以了
主要思想就是把f1当做f2的一亏铅个参数传递到f2中

阅读全文

与winform编程实例相关的资料

热点内容
余美颜摩登情书txt 浏览:819
linux命令大全完整版 浏览:829
单片机画电路图用什么软件好 浏览:108
phpfpm工作原理 浏览:421
加密u盘定制哪家好 浏览:947
如何将视频做成动态表情包安卓 浏览:964
外置打印服务器是什么 浏览:321
加密电脑钱包 浏览:693
javastring编程题 浏览:796
淑女宠爱在线电影 浏览:879
ipadstore是什么app 浏览:485
如何看华为服务器raid的型号 浏览:275
于谦和王宝强一起演的电影 浏览:800
python学习手册epub 浏览:931
日韩经典悬疑犯罪电影推荐 浏览:576
现在能看的网站 浏览:781
怎么建立多个udp服务器 浏览:657
吃鸡令牌app是什么 浏览:548
汽车空调压缩机温度高 浏览:209