标签

标签 ‘csharp’ 的存档

C# RichTextBox RTF文件 数据库的存入与读取显示 实例源码下载

2010年5月10日

文件在数据库中的存取,是实际开发中,应用比较普遍的一种需求。在dot net平台,实现起来是非常的方便。因为.net对于数据流和二进制的操作,相当的强大。

本文用实例演示

  • 将一个RTF文件打开并显示在RichTextBox中
  • 将RichTextBox中的RTF内容存入到数据库中
  • 将数据库中的RTF内容读出,并显示在RichTextBox中

 

运行的演示界面

C# RTF文件 数据库 richtextbox

 

[ more 阅读全文 ]

.Net, Asp.Net, C#, VB.NET , , , , , ,

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的实例函数中。

 

我就是一开始忽略了这个问题,结果导致程序莫名其妙的混乱了。

分享出来,免得大家以后重蹈覆辙。

[ more 阅读全文 ]

.Net, C#, VB.NET , , , , , , , ,

C#获取外部程序ListView中的数据(Windows Api + SysListView32)

2010年3月18日

c# 外部程序 listview syslistview32

 

此文章,主要实现了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));
}
[ more 阅读全文 ]

.Net, API, C# , , , ,

LinkLabel多链接的使用方法

2010年2月20日

LinkLabel 多链接 C# WinForm

 

LinkLabel 是.NET里面提供的一个用于 Windows Form 显示链接的控件,可能很多朋友都使用过该控件。

但是,这个控件可以一次性显示N个链接地址,可能熟悉的朋友就不多了 :)

 

LinkLabel 可以将它的Text分段划分为N个链接,并可以设置链接的颜色等个性化设置,同时,可以略过某些字符,如上图所示。

 

实现的代码,是非常简单的:
[ more 阅读全文 ]

C#, VB.NET, Visual Studio , , , , ,

C#实现人民币金额小写转大写的代码

2010年1月30日

C# csharp 人民币金额小写转大写 RMB

 

    在做涉及到金额的内容时,通常是需要输出一个金额的大写形式,这是中国的传统哦,嘿嘿,同时也提高安全性。

实现人民币从小写到大写的方法有很多种,今天,我这里提供一种给大家共享 :)

c# visual studio 2008 金额小写转大写

 

[ more 阅读全文 ]

Asp.Net, C#, VB.NET , , , , ,

C#打印DataGridView的例子源码

2010年1月30日

c# 打印 DataGridView Print

 

这是来自codeproject的一个开源项目,作者提供了一个封装好的打印DataGridView的类,使用起来非常简单。

支持常见的各种打印设置和分页等、支持页眉、页脚,页码显示位置、字体设置等等……

 

由于.NET自带的打印功能,过于弱了,使用起来非常不方便。

我对这个类库进行了测试,对中文的支持也很完美

 

[ more 阅读全文 ]

C#, VB.NET , , , , ,