winform

WinForm设计随笔

╄→гoц情女王★ 提交于 2019-12-24 18:55:26
WinForm 1.健壮性 处理异常输入 完善判定条件:考虑边界条件和范围超出 2.高内聚低耦合 抽象思维 精简类的功能 封装、继承、多态(参见 C#多态:重载、虚方法、抽象类和接口 ) 参考23种设计模式 3.关闭修改,开放扩展 不应该修改已实现 使用继承多态等特性扩展接口的实现 4.代码简洁 简洁通常意味着高效 易读易维护 使用语言特性而非类库以简化代码 5.不应该为了设计而增加设计 非必要的情况下,过多的“设计”会增加代码的复杂性和维护难度 不应为拓展预留接口,除非拓展真的出现或者拓展是已知必须的 6.不应该在UI线程进行耗时操作 耗时操作放在其他线程中,防止阻塞UI 在其他线程更新UI时,必须使用委托,使得UI的更新在UI线程进行 来源: CSDN 作者: Leo-夜空 链接: https://blog.csdn.net/weixin_43104399/article/details/103686086

C#winform窗体利用系统抓取关闭按钮事件

落爺英雄遲暮 提交于 2019-12-24 14:02:04
const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = 0xF020; const int SC_MAXIMIZE = 0xF030; protected override void WndProc(ref Message m) { if (m.Msg == WM_SYSCOMMAND) { if (m.WParam.ToInt32() == SC_MINIMIZE) //是否点击最小化 { //这里写操作代码 this.Visible = false; //隐藏窗体 return; } if (m.WParam.ToInt32() == SC_MAXIMIZE ) //是否点击最大化 { //..................... } if (m.WParam.ToInt32() == SC_CLOSE) //是否点击关闭 { //关闭时发生的事件 } } base.WndProc(ref m); } 来源: https://www.cnblogs.com/ziteng1807/p/10715011.html

WINForM学习 控件的通用属性

让人想犯罪 __ 提交于 2019-12-24 01:08:22
在学习WinForm控件时,常有一些有用的通用属性,也就是这个属性这个控件有,其他控件也有,却很实用。 1。Dock -- 定义要绑定到容器的控件边框。一般有上下左右边框,fill是所有边框,设置后父容器大小变化时,你所设置的控件大小也会随着变化。 this.CenterToScreen(); 使窗口在当前屏幕中居中。 this.MaximizeBox = true; 是否显示最大化按钮。 this.CancelButton = btnTitle; 按"ESC"键时的按钮。 this.Hide() 隐藏控件。 void ISamplesBase.ShowMe( Form owner ) if (owner != null) this.Owner = owner; 获取或设置拥有此窗体的窗体。 objNode.Tag 包含树节点有关数据的对象。 按钮 按钮点击事件 private void btnTitle_MouseUp(object o, MouseEventArgs e) { Navigation(e.Button); } public void Navigation( MouseButtons button ) { switch (button) { case MouseButtons.Left: case MouseButtons.Right: } Enum this

WinForm开发(75)——C# WinFrom捕获按键按下事件

末鹿安然 提交于 2019-12-24 00:49:44
C# WinFrom对于控件的所有事件在其属性窗口都能找到对应的属性,按键事件也不例外。 要为对应的事件添加事件处理,只需双击其属性,VS 即可自动生成框架代码,C# 对按键的处理主要有3个事件,分别是KeyDown,KeyUp和KeyPress事件,VS上的属性视图对他们的描述如下: KeyDown:Occurs when a key is first pressed.(当按键被按下时触发) KeyUp:Occurs when a key is released.(当按键释放时触发) KeyPress:Occurs when the control has focus and the user presses and releases a key.(当得到焦点并且用户按下或释放按键时触发) 下面使用几个例子来分别介绍这3种不同的事件: 一、KeyDown事件: 双击属性视图里的KeyDown事件,VS会自动生成如下框架代码: private void tbIP1_KeyDown(object sender, KeyEventArgs e) { } 其中tbIP1是控件的名字,现在为其添加相应的处理: private void tbIP1_KeyDown(object sender, KeyEventArgs e) { MessageBox.Show("KeyCode:" + e

winform刷新父窗体

余生颓废 提交于 2019-12-23 01:36:03
网络上有几种方法,先总结如下: 调用窗体(父):Form1,被调用窗体(子):Form2 方法1: 所有权法 //Form1: //需要有一个公共的刷新方法 public void Refresh_Method() { //... } //在调用Form2时,要把Form2的所有者设为Form1 Form2 f2 = new Form2() ; f2.Owner = this; f2.ShowDialog() ; //Form2: //在需要对其调用者(父)刷新时 Form1 f1 ; f1 = (Form1)this.Owner; f1.Refresh_Method() ; 方法2:自身传递法 //Form1: //需要有一个公共的刷新方法 public void Refresh_Method() { //... } Form2 f2 = new Form2() ; f2.ShowDialog(this) ; //Form2: private Form1 p_f1; public Form2(Form1 f1) { InitializeComponent(); p_f1 = f1; } //刷新时 p_f1.Refresh_Method() ; 方法3:属性法 //Form1: //需要有一个公共的刷新方法 public void Refresh_Method() { //...

在net Core3.1上基于winform实现依赖注入实例

大兔子大兔子 提交于 2019-12-22 19:18:48
目录 在net Core3.1上基于winform实现依赖注入实例 1.背景 2.依赖注入 2.1依赖注入是什么? 2.1依赖注入的目的 2.2依赖注入带来的好处 2.2.1生命周期的控制 2.2.2 实现了展现层(调用者)与服务类之间的解耦 2.2.3 开发者不用再去考虑依赖之间的关系 2.3 依赖注入使用的设计模式 2.3.1 代理模式 2.3.2 工厂模式 3.在Net Core 3.1上基于winform实现依赖注入 3.1 Net Core 3.1中对winform的支持。 3.2 winform依赖注入与net core MVC的不同? 3.4代码实现 3.4.1 在Program.cs中建立服务注册静态方法 3.4.2 创建服务容器对象 3.4.3 添加服务注册 3.4.4 构建ServiceProvider对象 3.4.5 运行MainForm服务 3.4.6构造函数法调用DI实例 3.5演示效果 4.最后 在net Core3.1上基于winform实现依赖注入实例 1.背景 net core3.1是微软LTS长期3年支持版本,正式发布于2019-12-03,并且在windows平台上支持了Winfrom跟WPF桌面应用。本文介绍了使用Winform时的第一步,将应用层以及ORM涉及到的DBconfig,仓储层等依赖注入到容器中,并通过构造函数法从容器中调用实例

winform npoi 将execl转换成datatable,导入数据库

最后都变了- 提交于 2019-12-22 07:06:30
直接在vs中用nuget安装npoi NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。 优点:读取Excel速度较快,读取方式操作灵活性 导入数据库的代码我没贴,看你需要怎么导入,一条一条导入,还是批量导入咯。都可以,反正datatable已经得到了. //获取execl信息 public DataTable getExeclinfo() { DataTable dt = new DataTable(); //打开文件,获取execl文件 System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog(); if (fd.ShowDialog() == DialogResult.OK) { if (fd.FileName.Contains(".xls") && fd.FileName.Contains(".xlsx")) { fileName = fd.FileName; dt = ExcelToDataTable("sheet1", true); } else { MessageBox.Show("请选择execl文件"); } }

WinForm中使用WPF的控件

旧城冷巷雨未停 提交于 2019-12-22 03:13:21
在WinForm中可以使用WPF中的控件,或者由WPF创建的自定义控件; 步骤1:创建WinForm工程; 步骤2:在WinForm工程的解决方案资源管理器中,在刚刚创建的WinForm解决方案中新建或者添加现有的WPF用户控件工程; 步骤3:在WPF中创建自定义的控件,或者添加WPF控件到面板上; 步骤4:在WinForm面板上添加ElementHost控件(工具箱中); 步骤5:生成解决方案; 步骤6:在刚刚的ElementHost中的Child属性中添加刚刚的WPF生成的控件; 步骤7:完成。 如果在ElementHost的Child属性中添加了WPF生成的控件,编译的时候出现如下错误: 错误 1 类型“System.Windows.Markup.IComponentConnector”在未被引用的程序集中定义。必须添加对程序集“System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。 则要在WinForm中解决方案-> 添加引用->System.Xaml,类似的错误,就添加相应的引用。 如何在winform中调用WPF用户控件里面的属性和方法呢 ,如图: WinForm工程为test,WPF用户控件工程为WpfControlLibrary1。

使用cefsharp在winform中嵌套浏览器

帅比萌擦擦* 提交于 2019-12-21 20:27:36
1. 创建winform程序 2. 在项目中,右击引用,选择nuget包,引入cefsharp.winforms包 3. 更改winform生成配置,之前的cefsharp.winforms不支持anyCPU配置,现在支持了 右击项目,选择属性,选择生成,更改生成配置勾上“32位优先” 4. 更改项目的csproj文件,添加 <CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport> 5. 更改项目中的App.config文件,添加: <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="x86"/> </assemblyBinding> </runtime> 6. 使用cefsharp: 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;

WinForm DevExpress使用之ChartControl控件绘制图表一——基础

寵の児 提交于 2019-12-21 11:29:55
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下。 DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图、饼状图、柱状图等图表。 1.绘制图表基本步骤   准备数据并绑定   这里从数据库中取得数据,可以根据自己的需要修改。 1 DataTable dtData = BF<bll_ep_collection_data>.Instance.GetDataTable(sqlwhere, "data_time", parameters); 2 //建立新的datatable,用来存储XY坐标 3 DataTable dtXY = new DataTable(); 4 //横坐标的值 5 dtXY.Columns.Add(new DataColumn("类型")); 6 var list = new List<object>(); 7 //纵坐标的值 8 list.Add("数值"); 9 //这里是控制x轴显示数据的数量,ArgumentScaleType类型设置为ScaleType.Qualitative时他不会自动控制x轴的数量 10 //如果得到数据小于X_COUNT,则x轴显示全部得到的数据 11 if (X_COUNT < dtData.Rows.Count) 12 { 13 for (int