标签
标签 ‘csharp’ 的存档
2010年5月10日
C# WinForm 慎用 override CreateParams 来重载窗体的一些特性
2010年3月28日
在DONET开发WINFORM的过程中,我们有时需要对FORM窗体做一些特殊的设置,比如:
隐藏主窗体,只显示右下角的任务栏图标
上面的“隐藏主窗体”,有多种实现方式,但最为完美和彻底的方法,就是重写基类窗体的CreateParams事件,来实现。
protected override CreateParams CreateParams { get { base.Visible = false; return base.CreateParams; } }
上面的代码,就是实现方式,非常简单有效,这个主窗体根本不会出现。
但是,这个方式却有个弊端:
因为override了base form的Visible属性,所以该FORM的一些相关事件将被同时忽略了。这些事件包括:
Form_Load, Form_Shown, Form_Paint 等。这些事件是不会被执行的,所以,如果你有需要执行的代码,最好写在FORM的实例函数中。
我就是一开始忽略了这个问题,结果导致程序莫名其妙的混乱了。
分享出来,免得大家以后重蹈覆辙。
[
阅读全文 ]C#获取外部程序ListView中的数据(Windows Api + SysListView32)
2010年3月18日
此文章,主要实现了C#利用Windows Api 获取外部程序中的ListView控件中的数据,也算是C# 使用API的一个高级一些的例子吧。
下面列出API相关的声明部分:
/// <summary> /// 作者: 三角猫 /// 网址: http://www.zu14.cn/ /// 声明: 转载请务必保留原作者信息 /// </summary>
const uint LVM_FIRST = 0x1000; const uint HDM_FIRST = 0x1200; const uint LVM_GETITEMCOUNT = LVM_FIRST + 4; const uint LVM_GETITEMW = LVM_FIRST + 75; const uint LVM_GETHEADER = LVM_FIRST + 31; const uint HDM_GETITEMCOUNT = HDM_FIRST + 0; [DllImport("user32.DLL")] static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); [DllImport("user32.DLL")] static extern IntPtr FindWindow(string lpszClass, string lpszWindow); [DllImport("user32.DLL")] static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll")] static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint dwProcessId); const uint PROCESS_VM_OPERATION = 0x0008; const uint PROCESS_VM_READ = 0x0010; const uint PROCESS_VM_WRITE = 0x0020; [DllImport("kernel32.dll")] static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId); const uint MEM_COMMIT = 0x1000; const uint MEM_RELEASE = 0x8000; const uint MEM_RESERVE = 0x2000; const uint PAGE_READWRITE = 4; [DllImport("kernel32.dll")] static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); [DllImport("kernel32.dll")] static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint dwFreeType); [DllImport("kernel32.dll")] static extern bool CloseHandle(IntPtr handle); [DllImport("kernel32.dll")] static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, ref uint vNumberOfBytesRead); [DllImport("kernel32.dll")] static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, ref uint vNumberOfBytesRead); public struct LVITEM { public int mask; public int iItem; public int iSubItem; public int state; public int stateMask; public IntPtr pszText; public int cchTextMax; public int iImage; public IntPtr lParam; public int iIndent; public int iGroupId; public int cColumns; public IntPtr puColumns; } int LVIF_TEXT = 0x0001;
几个操作LISTVIEW的自定义函数
/// <summary> /// 获取 ListView 的行数 /// </summary> /// <param name="hwnd"></param> /// <returns></returns> int ListView_GetItemCount(IntPtr hwnd) { return SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); } /// <summary> /// 获取 ListView 的标题栏句柄 /// </summary> /// <param name="hwnd"></param> /// <returns></returns> private IntPtr ListView_GetHeader(IntPtr hwnd) { return (IntPtr)SendMessage(hwnd, LVM_GETHEADER, 0, 0); } /// <summary> /// 获取 ListView 的标题栏的列数 /// </summary> /// <param name="header"></param> /// <returns></returns> private int Header_GetItemCount(IntPtr header) { return SendMessage(header, HDM_GETITEMCOUNT, 0, 0); } /// <summary> /// 获取 ListView 的列数 /// </summary> /// <param name="listViewHandle"></param> /// <returns></returns> int ListViewColumnCount(IntPtr listViewHandle) { return Header_GetItemCount(ListView_GetHeader(listViewHandle)); }
阅读全文 ]LinkLabel多链接的使用方法
2010年2月20日
LinkLabel 是.NET里面提供的一个用于 Windows Form 显示链接的控件,可能很多朋友都使用过该控件。
但是,这个控件可以一次性显示N个链接地址,可能熟悉的朋友就不多了
LinkLabel 可以将它的Text分段划分为N个链接,并可以设置链接的颜色等个性化设置,同时,可以略过某些字符,如上图所示。
实现的代码,是非常简单的:
[
阅读全文 ]C#实现人民币金额小写转大写的代码
2010年1月30日
C#打印DataGridView的例子源码
2010年1月30日

