dat保存登陆密码
winform--记住密码 收藏 要引用IO包 private string accountFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) +"\\accounts.dat "; private IDictionary<string, string> accounts = new SortedList<string, string>(); /// <summary> /// 记住密码 /// </summary> private void ReloadAccounts() { this.txtUserName.AutoCompleteCustomSource.Clear(); accounts.Clear(); ...
C#事件委托(三)
现在假设我们想要获得多个订阅者的返回值,以List<string>的形式返回,该如何做呢?我们应该记得委托定义在编译时会生成一个继承自MulticastDelegate的类,而这个MulticastDelegate又继承自Delegate,在Delegate内部,维护了一个委托链表,链表上的每一个元素,为一个只包含一个目标方法的委托对象。而通过Delegate基类的GetInvocationList()静态方法,可以获得这个委托链表。随后我们遍历这个链表,通过链表中的每个委托对象来调用方法,这样就可以分别获得每个方法的返回值:class Program4 { static ...
C#事件委托(二)
Observer设计模式简介上面的例子显然能完成我们之前描述的工作,但是却并不够好。现在假设热水器由三部分组成:热水器、警报器、显示器,它们来自于不同厂商并进行了组装。那么,应该是热水器仅仅负责烧水,它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温。这时候,上面的例子就应该变成这个样子: // 热水器public class Heater { private int temperature; // 烧水 private void BoilWater() { for (int i = 0; i <= 100; i++) { t...
C# 中的委托和事件(一)
引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管...
C#实现程序的版本升级更新
C#实现程序的版本升级更新 收藏 我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。 那么看看我是如何实现程序自动更新的。 直接上代码: using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.IO; using System.Net; using System.Xml; namespace Update { /// <summary> /// 更新完成触发的事件 /// </summary> public delegate void UpdateState(); ...
C#模拟鼠标点击
using System.Runtime.InteropServices; #region API [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [Flags] enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } #endregion //以上代码放在Class 任意处 mouse_ev...
C#连接EXCEL数据库
using System.Data.OleDb; //命名空间 private void button1_Click(object sender, EventArgs e) { string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.xls; Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn) string sql = "select * from [student$]"; //注意EXCEL数据库表形式 OleDbCommand cmd = new OleDbCommand(sql, conn); Ol...
C#跨线程调用
跨线程调用窗体控件 用户不喜欢反应慢的程序。在执行耗时较长的操作时,使用多线程是明智之举,它可以提高程序 UI 的响应速度,使得一切运行显得更为快速。在 Windows 中进行多线程编程曾经是 C++ 开发人员的专属特权,但是现在,可以使用所有兼容 Microsoft .NET 的语言来编写。不过Windows 窗体体系结构对线程使用制定了严格的规则。如果只是编写单线程应用程序,则没必要知道这些规则,这是因为单线程的代码不可能违反这些规则。然而,一旦采用多线程,就需要理解 Windows 窗体中最重要的一条线程规则:除...