winform

WinForm界面开发之 启动界面

点点圈 提交于 2020-02-08 04:24:04
我们在开发桌面应用程序的时候,由于程序启动比较慢,往往为了提高用户的体验,增加一个闪屏,也就是SplashScreen,好处有:1、让用户看到加载的过程,提高程序的交互响应;2.可以简短展示或者介绍程序的功能或者展示Logo,给客户较深的印象。 本人在开发的共享软件中,对于启动比较慢的程序,也倾向于引入这个控件来展示下,先看看软件启动的时候的效果 中间的那些文字“正在初始化应用程序......”可以根据加载的进度显示不同的内容,当然最好简单扼要了,其他的内容你也可以视需要做相应变化,因为这个是一个Form,你想改变什么就改变什么的。 看看闪屏代码如何使用先,首先我们在入口的Main函数中开始 static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //登陆界面 FrmLogin dlg = new FrmLogin(); dlg.StartPosition = FormStartPosition.CenterScreen; if (DialogResult.OK ==

WinForm\"DataGridView单元格提示和相关应用\" 之配餐系统的开发

£可爱£侵袭症+ 提交于 2020-02-08 00:32:31
在winform应用程序开发中,DataGridView是 用的较多的、也(几乎)是数据(列表)显示必用的控件,而此文就是针对DataGridView控件的一些使用做些讲解。 一. DataGridView单元格提示 这个熟悉的朋友会选择CellToolTipTextNeeded 事件实现,也确实,然而此事件有个硬性的条件(或者说 让人感觉很不舒服的限制),如图: 上图中 红色区域[具体见msdn:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.celltooltiptextneeded(VS.80).aspx]就是我所说的限制,这样当我们想实现用代码一行行add Row时,此事件就与我们想要的发生冲突(无法实现单元格提示) ——因为在 DataGridView绑定的数据源(设置了 DataSource )后 或 该控件的 VirtualMode 属性为 true (此时行数无法改变),不能再动态添加行,但我们想要的 单元格提示效果必须还得想办法实现(在最初遇到此问题时,感觉有点儿'山穷水尽疑无路'),而后静下心去想,终用DataGridView的CellMouseEnter事件解决,代码如下: 代码 canInfoDgv.CellMouseEnter += new

WinForm(VB.NET)获取当前登录的用户名

ⅰ亾dé卋堺 提交于 2020-02-07 08:50:33
近段时间,需要写一个小功能,就是需要判断程序是否已经运行。 某个程序安装后,也许被多个用户运行。那怎样判断当前用户已经运行了此程序了呢? 下面是Insus.NET的做法,就是: 《 VB.NET WinForm获取运行程序用户名 》 http://www.cnblogs.com/insus/p/5194839.html 然后: 《 WinForm(VB.NET)获取当前登录的用户名 》 http://www.cnblogs.com/insus/p/5195126.html 从上面的方法,如果二者的值相同,那此程序已经被当前用户运行。 源代码: Public Shared Function IsRunning(processName As String) As Boolean Dim btnIsRun As Boolean = False Dim owner As String = GetProcessOwner(App) Dim po As String = owner.Substring(owner.LastIndexOf("\") + 1) Try Dim listProc() As System.Diagnostics.Process listProc = System.Diagnostics.Process.GetProcessesByName(processName)

【Winform】学习笔记(七)——Checkbox的使用(单选,全选,反选,获取值)

不羁的心 提交于 2020-02-07 00:49:20
多个CheckBox同时使用时,建议将CheckBox放在groupbox中,便于进行全选/非全选、获取选中的CheckBox的值 一、在groupbox中使用 全选/全不选 private void checkBox1_CheckedChanged ( object sender , EventArgs e ) { bool flag = this . checkBox1 . Checked ; if ( flag ) { foreach ( CheckBox ck in groupBox1 . Controls ) { ck . Checked = flag ; } } else { foreach ( CheckBox ck in groupBox1 . Controls ) { ck . Checked = flag ; } } } 单选 //勾选框的选中事件 if ( ( sender as CheckBox ) . Checked == true ) { foreach ( CheckBox chk in ( sender as CheckBox ) . Parent . Controls ) { if ( chk != sender ) { chk . Checked = false ; } } } 获取选中值 List < string > list = new

【Winform】学习笔记(二)—— WebClient异步回调Java后台接口

邮差的信 提交于 2020-02-04 18:03:13
【Winform】学习笔记(二)—— WebClient异步回调Java后台接口 背景: 项目中需要用到一个winform的桌面程序,主要是用winform来做前端界面,数据都是来源于Java后台接口,所以在这里做一个Winform调用Java后台接口的学习笔记。 一、调用的几种方式 常见的几种调用机制有同步调用(最基本的调用方式),异步调用,异步回调。 同步调用: 比如对象A中的方法调用到对象B的方法,这时程序会等待对象B的方法执行完返回结果才会执行对象A的方法。 异步调用: 对象A中的方法调用到对象B的方法,程序并不需要等待对象B的方法返回结果值,直接走下去。这样不会导致程序阻塞。 异步回调: 对象A的方法methodA()中调用对象B的methodB()方法,在对象B的methodB()方法中反过来调用对象A的callBack()方法,这个callBack()方法称为回调函数,这种调用方法称为回调。 二、为什么要用异步调用? 需要获取异步任务的执行结果,但是又不应该让其阻塞(降低效率),即想要高效的获取任务的执行结果。 之前在使用线程池或进程池提交任务时,如果想要处理任务的执行结果则必须调用result函数或是shutdown函数,而它们都是是阻塞的,会等到任务执行完毕后才能继续执行,这样一来在这个等待过程中就无法执行其他任务,降低了效率,所以需要一种方案

winform与web交互问题总结

China☆狼群 提交于 2020-02-02 21:41:02
最近做数据采集,碰到了很多钉子,这里一一记录下来。 很久没写东西了... ,不是没有写的,是没心情写,想的太多了,在想些什么,自己也说不清楚,往大了说关于人生,往小了说关于怎么活。扯远了,不废话了。 1、选择什么方式去采集? 网上方式很多WebClient,WebRequest和WebBroswer,分析需求之后选择 WebBroswer , 原因有几点: a、很多地方需要登陆之后才能采集,要做模拟登陆就会牵扯到状态保存问题等等 b、多级页面跳转,也需要模拟去触发点击事件 c、Ajax页面数据采集 2、WebBroswer 的加载状态问题,页面什么时候加载完? WebBroswer 加载状态一个页面时候加载完 , 一开始是一个很头疼的问题 , 写了个Demo发单凭WebBrowser.ReadyState是不可靠的 , 有人直接延时,但延多少根本没办法确定。 后来测试发现WebBrowser_DocumentCompleted事件会重复触发,造成业务逻辑混乱,找到问题之后就好办了,用完就去掉它这个委托。 if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return; webBrowser1.DocumentCompleted -= new

C# winform截图、web Cropper图片剪切、上传

为君一笑 提交于 2020-02-02 14:42:32
今天又来一弹,写了个小功能,windows 桌面截图,web剪切图片上传的功能。 废话不多说,直接上图: 1、winform 截屏功能 图1 主窗体 点击全屏截图,就已经全屏截图了,截图后,图片保存在程序根目录,同时,图片也在剪切板上了,可以直接黏贴到qq或其工具上,比如:我们播客的富文本编辑器 图2 区域截图 区域截图点击后,窗体半透明,鼠标变成 + 符号,可以自用拖拽截图,与qq截图差不多,不过没有做细化的东西,截图后,直接全屏显示了,各位看官忍忍哈,右键窗口关闭,图片在粘贴板,直接ctrl+v 可黏贴到先要黏贴的地方。 图3 图像预览 2、web头像截取效果(使用jquery+cropper.js实现+调用后端服务上传) 图4 图片裁剪首页 图5 裁剪页 图6 裁剪完成 图7 剪切并上传完成 图8 图像保存位置 至此,代码全部撸完,演示全部搞完~~!~! 感谢各位看官,楼下将公布本次编写小功能的代码哈,公布前,先说几句话 代码上传在CSDN,积分下载 代码对您有帮助是我的荣幸,我很高兴,不要说着酸溜溜的话唧唧歪歪滴啥的,你有没有CSDN的积分跟我没关系,你不喜欢CSDN是你的事情,我往CSDN上传是我的事情 再次感谢各位朋友、码友、博友的支持,谢谢大家 资源已经更新 CSDN 下载地址: https://download.csdn.net/download/l9861226

SynchronizationContext(同步上下文)综述

寵の児 提交于 2020-02-01 11:05:35
>>返回《C# 并发编程》 1. 概述 2. 同步上下文 的必要性 2.1. ISynchronizeInvoke 的诞生 2.2. SynchronizationContext 的诞生 3. 同步上下文 的概念 4. 同步上下文 的实现 4.1. WinForm 同步上下文 4.2. Dispatcher 同步上下文 4.3. Default 同步上下文 4.4. 上下文捕获和执行 4.5. AspNetSynchronizationContext 5. 同步上下实现类 的注意事项 6. AsyncOperationManager 和 AsyncOperation 7. 同步上下文 的Library支持示例 7.1. WCF 7.2. Workflow Foundation (WF) 7.3. Task Parallel Library (TPL) 7.4. Reactive Extensions (Rx) 7.5. 异步编程 Async 8. 限制和功能 1. 概述 无论是什么平台(ASP.NET 、WinForm 、WPF 等),所有 .NET 程序都包含 同步上下文 概念,并且所有多线程编程人员都可以通过理解和应用它获益。 2. 同步上下文 的必要性 2.1. ISynchronizeInvoke 的诞生 原始多线程 多线程程序在 .NET Framework

Winform--处理MDI父窗体与子窗体的交互

一个人想着一个人 提交于 2020-01-29 05:36:04
设置个窗体只能弹出一次 设置个窗体只能弹出一次 #region 设置个窗体只能弹出一次 /**/ /**/ /**/ /// <summary> /// 控制只弹出一个子窗体 /// </summary> /// <param name="type"> 子窗体类型 </param> public void FilmShow(Type type) { Form[] f = this .MdiChildren; foreach (Form form in f) { if (form.GetType().Name == type.Name) { form.Activate(); return ; } } Assembly a = Assembly.GetExecutingAssembly(); Form ff = (Form)a.CreateInstance(type.FullName); ff.MdiParent = this ; ff.Show(); // this.statusBarPanel3.Text = this.ActiveMdiChild.Text.ToString(); } /**/ /**/ /**/ /// <summary> /// 该窗体以模式窗体形式弹出 /// </summary> /// <param name="type"></param> public

winform图片添加水印

折月煮酒 提交于 2020-01-28 12:20:24
winform图片添加水印 布局界面: 代码: using System ; using System . Collections . Generic ; using System . ComponentModel ; using System . Data ; using System . Drawing ; using System . Linq ; using System . Text ; using System . Threading . Tasks ; using System . Windows . Forms ; using System . IO ; using System . Drawing . Imaging ; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1 ( ) { InitializeComponent ( ) ; } string [ ] filelist ; string dirfilepath ; private void button1_Click ( object sender , EventArgs e ) { if ( openFileDialog1 . ShowDialog ( ) ==