代码改变世界

随笔分类 -  C#

利用DescriptionAttribute实现枚举字符串

2014-01-24 11:00 by 假面Wilson, 303 阅读, 收藏,
摘要: 我们知道定义枚举时是不允许带空格等符号的,这样就不利于进行字符串对比。当然可以通过给枚举添加DescriptionAttribute,然后通过fieldinfo读取DescriptionAttribute来获取字符串。以下是例子先定义枚举 /// /// Campaign Mode /// public enum CampaignModeEnum { /// /// Inbound /// [DescriptionAttribute("Inbound")] Inbound, ... 阅读全文

Winform禁止容器内控件获得焦点时改变容器显示范围坐标

2014-01-20 15:18 by 假面Wilson, 650 阅读, 收藏,
摘要: 在Winform中当容器的可视高度无法显示所有控件并且容器的AutoScroll属性设置为True的情况下,但点击容器内某个未显示完整的控件时,会出现容器的滚动条自动下滚的情况。这是由于控件获得焦点时,容器的ScrollToControl事件被ScrollableControl类自动触发,用于更好的显示焦点控件的内容。我们可以通过重写ScrollToControl事件来处理。以Panel为例子,重写Panel控件。class PanelNoScrollOnFocus : Panel{ protected override System.Drawing.Point ScrollToCont... 阅读全文

DataGridView的单元格控制只能输入数字

2014-01-13 17:34 by 假面Wilson, 9045 阅读, 收藏,
摘要: 主要是应用DataGridView的EditingControlShowing事件。当单元格进入编辑模式时,可以处理执行该编辑控件的自定义初始化的此事件。public DataGridViewTextBoxEditingControl dgvTxt = null; // 声明 一个 CellEdit private void dgv2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { dgvTxt = (DataGrid... 阅读全文

.NET中的Action及Func泛型委托

2014-01-09 11:47 by 假面Wilson, 403 阅读, 收藏,
摘要: 委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储、传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托。C#的delegate关键字用于声明委托,它具有将声明委托类型映射到System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一。使用delegate关键字声明一个委托,实质上创建了System.Delegate的派生类,因此委托类型并非结构体也不是其它类型,它是一个类。一个委托对象也就是一个类的实例。以下是De 阅读全文

C# ?和??运算表达式

2014-01-08 15:32 by 假面Wilson, 578 阅读, 收藏,
摘要: 1、单问号(?) 作用:用于给变量设初化的时候,给变量(int类型)赋为null值,而不是0。 例子: public int a; //默认值为0 public int ?b; //默认值为null2、双问号(??) 作用:用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值,否则跳过。 例子: public int? b; //默认值为null public int IsNullOrSkip() { return b ?? 0; //返回值为... 阅读全文

如何在WebService中重载方法

2013-12-25 15:41 by 假面Wilson, 1876 阅读, 收藏,
摘要: 1. 本来在WebService中这样写的重载方法,如下所示: [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class DataObjectWebService : System.Web.Services.WebService { [WebMethod(EnableSession = true)] public int Add(int a, int b) { return a + b; 阅读全文

c# 终止线程

2013-10-30 17:28 by 假面Wilson, 1075 阅读, 收藏,
摘要: 最近在弄一个等待窗口,使用了线程去调用form。在结束线程这边碰到了些问题。调用:thread.Abort();thread.Join();老被ThreadAbortException异常抛出困扰。后来上网查询了相关信息,发现thread.Abort();就是通过ThreadAbortException异常来强制关闭线程的。为了不让这个异常抛出困扰,后来调用form的关闭事件来让线程终止。Form.Invoke((EventHandler)delegate { Form.Close(); });Thread.Join(); 阅读全文

ThreadStart中如何带参数

2013-10-24 14:56 by 假面Wilson, 20871 阅读, 收藏,
摘要: 1.ThreadStart线程执行带参数的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); }));2.System.Threading.ParameterizedThreadStart其实没有必要,ThreadStart本来就是个委托,里面又来了个匿名方法。多了一次方法的调用,虽然性能不会影响什么,但看着很别扭。c#有一个委托System.Threading.ParameterizedThreadStart,就是来做这事的,从名字上也可又看出来是带参数的.下面是原型:// 表示在 System. 阅读全文

C# 异常类型

2013-10-16 10:06 by 假面Wilson, 530 阅读, 收藏,
摘要: Exception 类描述SystemException 其他用户可处理的异常的基本类ArgumentException 方法的参数是非法的ArgumentNullException 一个空参数传递给方法,该方法不能接受该参数ArgumentOutOfRangeException 参数值超出范围ArithmeticException 出现算术上溢或者下溢ArrayTypeMismatchException 试图在数组中存储错误类型的对象BadImageFormatException 图形的格式错误DivideByZeroException 除零异常DllNotFoundException 找不 阅读全文

c#利用反射Assembly 对类和成员属性进行操作

2013-10-10 09:58 by 假面Wilson, 2850 阅读, 收藏,
摘要: protected static void test() { //获取程序集 Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();//Assembly.LoadFrom("test.dll"); //获取模块 Module[] modules = assembly.GetModules(); foreach (Module module in modules) { Console.WriteLine("module nam... 阅读全文

.NET 的 WCF 和 WebService 有什么区别?(转载)

2013-09-27 16:27 by 假面Wilson, 261 阅读, 收藏,
摘要: 问题:WCF与 Web Service的区别是什么?和ASP.NET Web Service有什么关系?WCF与ASP.NET Web Service的区别是什么?这是很多.NET开发人员容易搞错的问题。面试的时候也经常遇到。而很多新手也会因为初次接触WCF或者Web Service而陷入迷惑的境地,很多资料介绍的也不准确。我甚至和许多许多年开发经验的开发人员讨论这些问题,他们都无法分清二者的区别。相信很多人也被误导。以下是最常见的错误观点:Web Service太旧了;Web Service 就是 ASP.NET Web Service;WCF比Web Service性能好;WCF 比 AS 阅读全文

DatagridView内容自动换行和换行符换行

2013-09-26 10:03 by 假面Wilson, 15354 阅读, 收藏,
摘要: 内容自动换行:在 DataGridView 新增 Row 时,設定 DataGridView 的 DefaultCellStyle 屬性WrapMode=true;换行符换行:在 DataGridView 新增 Row 时,設定 DataGridView 的 DefaultCellStyle 屬性WrapMode=true;在需要换行的内容处添加:System.Environment.NewLine因为内容高度造成内容看不全的情况,可以通过设置:DataGridView.AutoResizeColumns() DataGridView.AutoSizeRowsMode = DataGridVi 阅读全文

c# Invalidate() Update() Refresh()的区别

2013-09-22 16:25 by 假面Wilson, 834 阅读, 收藏,
摘要: Control.Invalidate方法:使控件的特定区域无效并向控件发送绘制消息。通常情况下,用Invalidate()使区域无效就可触发该控件的重画了,但在一些条件下却没有触发重画.例如: private void button1_Click(object sender, EventArgs e) { textBox1.Text = "888"; textBox1.Invalidate(); //textBox1.Update(); // textBox1.Refresh(); Thread.Sleep(5000); textBox1.Text = "999& 阅读全文

Winform重画ComboBox背景色

2013-09-22 15:01 by 假面Wilson, 6385 阅读, 收藏,
摘要: //返回hWnd参数所指定的窗口的设备环境。 [System.Runtime.InteropServices.DllImport("user32.dll")] static extern IntPtr GetWindowDC(IntPtr hWnd); [System.Runtime.InteropServices.DllImport("user32.dll")] //函数释放设备上下文环境(DC) static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); ... 阅读全文

窗口过程 Wndproc

2013-09-22 14:58 by 假面Wilson, 2336 阅读, 收藏,
摘要: 操作系统向应用程序发送一系列消息,如左键按下和左键抬起,应用程序将通过GetMessage等方法 Wndproc应用例子最终将消息提交到窗口过程(WndProc)指向一个应用程序定义的窗口过程的指针。每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle)HWND,消息ID(Message ID)UINT,和两个消息参数(wParam, lParam)WPARAM、LPARAM,WndProc的第一个参数hWnd就是当前接收消息的窗口句柄,第二个参数就是被传送过来的消息,第三、第四个参数都是附加在消息上的数据,这和MSG结构体是一 阅读全文

设置DatagridView的列头样式

2013-09-10 12:54 by 假面Wilson, 1016 阅读, 收藏,
摘要: 设置DataGridView.ColumnHeaderDefaultCellStyle的BackColor属性会发现没有效果。这是因为在启动了可视样式的时候,BackColor和ForeColor的值会被忽略。要解决很简单:datagridview1.EnableHeadersVisualStyles = false;获取或设置一个值,该值指示在对应用程序启用了可视样式的情况下,行标题和列标题是否使用用户当前主题的可视样式。 阅读全文

winform 获取当前程序运行根目录

2013-09-02 14:31 by 假面Wilson, 315 阅读, 收藏,
摘要: 1 // 获取程序的基目录。 2 System.AppDomain.CurrentDomain.BaseDirectory 3 4 5 // 获取模块的完整路径。 6 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 7 8 9 // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。10 System.Environment.CurrentDirectory11 12 13 // 获取应用程序的当前工作目录。14 System.IO.Directory.GetCurrentDirectory(... 阅读全文

无法识别的属性 configProtectionProvider的解决方案

2013-08-22 11:09 by 假面Wilson, 1228 阅读, 收藏,
摘要: 用RsaProtectedConfigurationProvider加密数据库连接字符串时,只要App.config有任何改动,都会提示无法识别的属性 configProtectionProvider。只需要把刷新节点改成刷新配置文件就可以解决:把ConfigurationManager.RefreshSection("connectionStrings");改成ConfigurationManager.RefreshSection("configuration"); 阅读全文

Winform 加密连接字符串“未能提供RsaProtectedConfigurationProvider加密,对象已存在”的解决方案

2013-08-21 17:08 by 假面Wilson, 1580 阅读, 收藏,
摘要: 当一台机器已安装软件,并有新用户需要使用此软件时提示“未能提供RsaProtectedConfigurationProvider加密,对象已存在”。这是因为加密模式是用户模式,需要运行以下脚本添加新用户:aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"其中aspnet_regiis在C:\Windows\Microsoft.NET\Framework\v2.0.50727 注意:必须登录安装软件的用户后才能运行成功脚本 阅读全文

Winform RsaProtectedConfigurationProvider 加密数据库连接字符串

2013-08-21 17:04 by 假面Wilson, 812 阅读, 收藏,
摘要: private static string _strProvider = "RsaProtectedConfigurationProvider"; /// /// 提供加密的驱动 /// public string Provider { get { return _strProvider; } set { _strProvider = value; } } /// /// /// public Conf... 阅读全文