![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Winform
homehome...
这个作者很懒,什么都没留下…
展开
-
c# DataGridView datasource綁定datatable 與dataview的區別
假如 有DataGridView dgv; DataView dv; DataTable dt 3個對象都已初始化。1. dgv的DataSource设为dt 如果點擊DataGridView對数据進行排序,此時数据源dt的数据不會同步進行排序,這樣datagrid顯示的數據排序與dt 的就會不一樣,如果用索引索取数据会导致数据混亂,例如:dgv.Rows[1]["CustomName"].value 不等于 dt.Rows[1]["CustomName"];2. dgv的DataSourc原创 2021-05-20 10:32:01 · 1629 阅读 · 1 评论 -
c#利用反射按名稱找到類的方法并執行
private void btnFindMethod(string pClassName,string pMethodName) { Assembly proj = Assembly.GetExecutingAssembly();//得到当前运行的project程序集 Type tp = proj.GetType(pClassName);//按名稱find指定的类 if (tp == null) ...原创 2021-05-11 13:18:36 · 273 阅读 · 0 评论 -
c# 读写excel文件
**首先项目要引用excel.dll:Microsoft.Office.Interop.Excel /// <remarks></remarks> public string[] Excel_Read(string filePath, string[] cellAddress,string workSheetName) { List<string> listExcelVal = new L原创 2021-05-07 11:24:40 · 506 阅读 · 0 评论 -
利用线程解决页面打开加载数据延迟的问题
打开页面时,如果碰到初始化数据需要时间较长,会导致打开页面有明显的延迟现象,影响用户体验效果.解决思路: 我们知道页面是由UI主线程处理,那么我们可以用 子线程去初始化数据(例如获取后台数据库数据等),等待数据获取完毕后,再并入主线程显示.例子:可以比较两种方法耗时 static System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); //为测试使用, 得出耗时的时间 private void Jo原创 2021-04-28 15:51:03 · 438 阅读 · 0 评论 -
允許文本框輸入數字,退格鍵,小數點,負號
只允許文本框輸入數字,退格鍵,小數點,負號VB.NET Private Sub PermitInputNumber(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTopRead0.KeyPress,txtTopRead120 ,txtTopRead240 ,txtTopRead360 ,txtBottomRead0 ,txtBottomRead120 ,txt原创 2021-04-27 08:30:20 · 59 阅读 · 0 评论 -
Winform datagridview绑定数据源后,无法以 Rows.Insert方法插入新行
datagridview1.Rows.Insert (0,1);出现以下错误:當控制項已繫結資料時,無法以程式設計的方式將資料列加入 DataGridView 的資料列集合。怎么解决:原创 2021-03-30 11:54:06 · 1697 阅读 · 1 评论 -
Ilist To DataTable
我们在项目中经常会使用到 List 转为 DataTable一. 通过 扩展方法的方式,写一个IList接口的扩展方法using System;using System.Collections.Generic;using System.Data;using System.ComponentModel;namespace DocumentSearch{ public static class DataTableExtensions { public static原创 2021-02-02 12:00:10 · 133 阅读 · 0 评论 -
DataGridView或 DataTable导出到excel
一.首先,项目中引入 excel.dll二.代码:1. datagridview to excelusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.ComponentModel;namespace DocumentSearch{原创 2021-02-02 11:44:01 · 240 阅读 · 0 评论 -
WinForm DatagridView绑定大量数据卡顿的问题
有时我们在绑定显示 Datagridview数据时明显感觉到卡顿.解决方法1: 设置缓冲在窗体的构造函数写下如下代码:public Form1() { //设置窗体的双缓冲 this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);原创 2021-02-02 11:10:32 · 4820 阅读 · 2 评论 -
项目中得到执行文件版本或其它信息
项目中我们有时会显示当前版本.类文件:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;namespace DocumentSearch.Helper{ class FileInfoHelper { /// <summary>原创 2021-02-02 10:54:49 · 59 阅读 · 1 评论 -
DataGridView分頁控件
效果如下:一、在vs中新建一個 WindowsFormsControlLibrary項目1.拖入相關的控件2.代碼using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using原创 2021-01-31 00:14:46 · 251 阅读 · 0 评论 -
递归:访问页面的控件或文件夹的下文件
一.访问页面控件(C#) private void InitPageCtr(Control control ) { foreach (Control ctr in control.Controls ) { if (ctr.HasChildren) InitPageCtr(ctr); else {原创 2021-01-29 13:16:17 · 54 阅读 · 0 评论 -
SQL Server 批量写入(BuldInsert)的例子
/// <summary> ///大批量数据插入 /// </summary> /// <param name="table">数据表</param> /// <param name="connectionString">数据库连接字符串</param> /// <returns></returns> public .原创 2021-01-02 09:34:04 · 364 阅读 · 0 评论 -
Delegate类的BeginInvoke()异步委托方法
微软docs参考:https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously也可参考:http://www.cnblogs.com/sosowjb/archive/2012/08/11/2633953.html 写得也很好.异步委托首先定义一个委托:public delegate string MyDeleg原创 2021-01-19 17:16:26 · 521 阅读 · 0 评论 -
构造函数的例子
我们经常可以利用类的构造函数进行一些跨页面传值,初始化等工作.例如 一个 WinForm:C#:Private string rtn_type = “”public frmTest (string rtntype) : this(){this.rtn_type = rtntype;}在别的页面调用:frmTest frmtest = new frmTest (“ADD”);frmtest.Show();VB:Private rtn_type As String = “”''co原创 2021-01-16 11:28:49 · 430 阅读 · 0 评论 -
写一个Comparer 类,比较两个字串包含即相等.
纯属练手. 写一个Comparer 类,比较两个字串包含即相等. Private Sub TestStringCmp_Contain() Dim list1 = New List(Of String)() list1.AddRange({"ab", "cd", "ef"}) Dim list2 = New List(Of String)() list1.AddRange({"a", "c", "e"}) list1.AsEn原创 2021-01-11 17:05:44 · 113 阅读 · 2 评论 -
C# Task.Delay()和Thread.Sleep()的區別
Thread.Sleep()是同步延迟,会阻塞當前线程;Task.Delay()是异步延迟,如果用在同步代碼中使用,不会阻塞當前线程,也沒有意義。 Thread.Sleep()不能取消;Task.Delay()可以,可與async/await和CancellationTokenSource组合起来使用。 在异步代码中使用Thread.Sleep()是不好的選擇。通常使用await关键字调用Task.Delay()。一個例子: private async void button12_C...原创 2021-01-01 22:02:05 · 1430 阅读 · 0 评论 -
一个使用delegate委托进行资料查询过滤的例子
近期碰到一个查询页面,逻辑很简单,就是查询资料并显示.但用户较多,提出的修改需求较频繁,有不同技术部的同事都修改过. 开始新建时,查询用了sql + sqlparameter得到结果显示;后来用户增加查询条件, 另一同事用了Row filter进行过滤,再后来用户又加查询条件,又有同事用了 Linq过滤, hahahaha. 现在用户又要加查询条件. 打开代码一看,晕服了,各个方法间关联度很大,专业词就是耦合度高,动一毛牵全身,要同时修改几个方法的内容,下决心还是重新写过.主要思路:从Database原创 2020-12-31 14:56:19 · 121 阅读 · 0 评论 -
使用Invoke,BeginInvoke 在多线程中更新UI主线程的元素
//分線程不能調用 UI 控件的(CLR出於安全考慮,默認是不允許),所以用 BeginInvoke,BeginInvoke所谓的异步,是相对于调用线程的异步,而不是相对于UI线程的异步。//例子:TextBox1.BeginInvoke((MethodInvoker)delegate { TextBox1.Text = "ABCD"; });...原创 2020-12-14 11:49:00 · 977 阅读 · 0 评论 -
關于 parallel.ForEach,parallel.ForAll 操作共享變量,寫入數據庫表的一個小測試
/// <summary> /// 總結1: paraller.ForAll,parallel.ForEach ,并行操作共享變量Num,List時,因不同線程同時訪問,可能會得不到預想 的結果: /// 1.1. 開啟多個線程,并行無序遍歷全部集合的元素,完成后再執行后面的語句。 /// 1.1 int Num ++ ,執行完后,得不到預期每次加1的結果 /// 1.2 listParallel.Add(o) 執行完后,lis原创 2020-12-19 14:12:42 · 284 阅读 · 1 评论 -
C#将Excel文件中选择的内容,复制粘贴到 winform datagridview
//粘贴按钮的代码 private void btnPast_Click(object sender, EventArgs e) { //past from clipboad try { string[] itemRow = Regex.Split(Clipboard.GetText(), Environment.NewLine); //Excel 的每行以回车键分开原创 2020-12-08 16:33:54 · 799 阅读 · 0 评论 -
Linq GroupJoin(一)
兩個測試用表:員工工資表EmpId int, //員工 IDDeptId int,//部門IDSalary decimal(18,2) //工資部門表DeptId int, //部門DeptName nvarchar(100)///// /// Linq GroupJoin 類似于 Sql Left outer join/// private void btnGroupJoin_Click(object sender, EventArgs e){DataSet ds原创 2020-12-06 19:02:39 · 852 阅读 · 1 评论 -
DataGridView綁定數據相關
DataGridView 的Datasource可以是以下幾種接口的類型Ilist接口,例如數組IlistSource接口,例如 DataTable,DataSet類IBindingList接口,例如 BindingList類IBindingListView接口,例如 BindingSource類一、 對于數組 ,如果直接進行綁定,可能得不到我們想要的結果。 //bind array string[] arrTest = { "AAAAA", "BBBBB", "CCCCC", "DDD原创 2020-12-04 22:47:00 · 68 阅读 · 0 评论 -
VS WinForm 中 父Datagridview嵌套子DatagridView
最近项目中应用到 在一个主Datagridview嵌套另一个子DatagridView.效果如下:实现的思路: 在父 Datagridview 点击的当前行的下方,显示子Datagridview. //Step 1 private void Form_Load(object sender, EventArgs e) { //dgv : Master grid //dataGridView1: Detail grid原创 2020-11-19 10:22:41 · 2400 阅读 · 2 评论 -
Datagridview 相关
给combox绑定数据(可以放在Page_Load中)VB:'repWiClient 数据源 CType(dgvBilling.Columns("ColRepNo"), DataGridViewComboBoxColumn).DataSource = (From t In repWiClient Select t..原创 2020-11-03 09:29:18 · 186 阅读 · 0 评论 -
动态 增加/删除 控件的关联事件
在项目中经常遇到用代码动态 增加 / 删除 控件的事件. 直接上代码C#:控件代码部分Button btnSave = new Button();btnSave.Name = “btnSave”;btnSave.Text = “Save”;// 增加 Click事件btnSave.Click += new EventHandler(btnSave_Click);//删除事件//btnSave.Click -= new EventHandler(btnSave_Click);事件代原创 2020-11-03 08:51:09 · 258 阅读 · 0 评论 -
外部程序用process.start调用 其它exe文件时可以传入参数.
调用方的程序调用代码:Process.Start(string exePathAndName, string parameter);被调用 方 接收参数可以在项目的入口程序program.cs 的[STAThread]static void Main(string[] msg){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);//Application.R.原创 2020-10-28 11:38:45 · 921 阅读 · 0 评论 -
c# winform BackgroundWorker 控件的使用
1、调用BackgroundWorker的RunWorkerAsync方法(可以传递参数),它将调用DoWork事件2、在DoWork的事件响应代码中调用耗时的操作.3、在耗时操作中判断CancellationPending属性,如果为false则退出4、如果要向用户界面发送信息,则调用BackgroundWorker的ReportProgress方法,它将调用ProgressChanged事件(可以将改变通过object类型传递)5、在ProgressChanged事件的响应代码中将改变呈现给用户原创 2020-06-17 11:03:39 · 504 阅读 · 0 评论 -
c# winform ,在一個類中如何調用另外窗體的控件或方法
第一種方法:在類中创建窗体对象的方式,通过对象调用控件或方法e.g: Form1 form1 = new Form1(); form1.Button; //调用控件 form1.Method(); //调用方法 這個方法要注意,對應控件的Modifiers属性要设置成public .第二種方法:在窗體Form类下定义静态变量(例如:form1),然后在類中引用这个靜態變量(form1)e.g:1.首先定義靜態變量form1 publ...原创 2020-06-16 11:55:55 · 950 阅读 · 2 评论 -
C# WinForm 打開PDF文檔
方法一:利用Procss.Start(“pdf文档路径”) eg: System.Diagnostics.Process.Start("F:\\1.pdf");方法二:(1)在工具箱中添加Adobe提供的ActiveX控件,如图所示:(2)拖动Adobe Acrobat 7.0 Browser Control控件到窗体中,并创建一个button4按钮,并添加...转载 2020-05-30 09:01:52 · 1001 阅读 · 0 评论 -
C# Winform跨窗口传递数据的几种情况
(转)Winform跨窗口传递数据的几种方法方法一:类中定义静态字段作为中间转换变量,在另一个类中直接改变静态字段的值。public partial class Form2_Main : Form{public static string _currentlogname = “”;public static bool _logon = false; public Form2_Main() { InitializeComponent(); } }pub原创 2020-05-25 22:28:42 · 1527 阅读 · 0 评论 -
c# winform 使用分线程防止按鈕點擊執行代碼頁面假死
假如winform頁面上 有兩個按鈕,Button1 ,Button2, B原创 2020-04-26 21:53:56 · 285 阅读 · 0 评论