木子屋 Dnawo's BLOG

分类:Win编程

共 358 篇

FileStream复制文件注意事项

使用FileStream读取文件时,为避免将大文件一次性全部读取到内存中,我们经常会声明一个byte做为临时存储空间,然后循环读取内容: 同理,在复制文件时我们也不希望将大文件一次性都读取到内存中,同样可以声明一个byte做为临时存储空间: 问题来了,当最后一次读取不满1024字节时,byte数组的剩余项都为0,这样在写入时将致使新文件比原文件占用更多的空间: 只需将代码稍加修改即可:

打开MDI窗体的泛型方法

/// <summary> /// 打开MDI窗体,同一个窗体只能运行一个实例 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parent"></param> public static void OpenForm<T>(Form parent) where T : Form,new() { //已打开则激活 foreach (Form f in parent.MdiChildren) { if (f is T) { f.Activate(); return;…

Windows 应用程序中"无法更新"Access2000数据库

今天头一次在Windows 应用程序中使用Access数据库,奇怪的是代码执行后所有操作似乎被回滚了,但程序又没报错。下边是一段添加记录的代码: 执行后打开数据库查看,并没有新增的记录!最终发现原因是:Windows 应用程序每次编译时,都会复制一份原始的Access数据库到Bin文件夹下,应用程序中的操作都是针对新数据库进行的,而我都是查看原始的那份Access数据库,才会有操作都被回滚的错觉

WinForm用户控件:ComboTextBox

WinForm应用程序做资料录入时,有些内容我们不希望让用户手工录入,而是弹出一新窗体让用户选择内容,这时我们就需要一个类似控件: vs2008中没有这样的控件,但通过组合TextBox和Button控件可以实现要求,这样我们得做个用户控件来满足需求,命名为ComboTextBox。 第一步:新建用户控件ComboTextBox,在界面放置好TextBox和Button后,控件代码(ComboTextBox.cs)如下: 第二步:主窗体代码(Form1.cs)如下: 最终效果: 点击这里下载源码,使用vs20008开发。

DataGridView添加右键菜单等技巧汇总

1.只显示自定义列 2.禁止调整行列大小 3.标题和内容居中显示 4.显示行号 添加RowPostPaint事件处理程序: 5.单元格内容格式化 添加CellFormatting事件处理程序: 6.修改行文字颜色/行背景色 添加CellFormatting事件处理程序: 7.右键点击行时选中行,并弹出操作菜单 ①. 添加一个快捷菜单contextMenuStrip1; ②. 给dataGridView1的CellMouseDown事件添加处理程序: 效果图: 8.复制选中单元格的内容到剪贴板 9.自定义列宽 手动添加列,再在编辑列界面中逐个设置宽度。注意AutoSizeColumnsMode的值必须为DataGridViewAutoSizeColumnsMode.None,否则自定义宽度不能生效!…

面向对象和Windows编程

面向对象技术是目前流行的系统设计开发技术,它包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统程序设计方法——结构化程序设计所不能解决的代码重用问题。 结构化程序设计从系统的功能入手,按照工程的标准和严格的规范将系统分解为若干功能模块,系统是实现模块功能的函数和过程的集合。由于用户的需求和软、硬件技术的不断发展变化,按照功能划分设计的系统模块必然是易变的和不稳定的。这样开发出来的模块可重用性不高。 面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。 面向对象程序设计同结构化程序设计相比最大的区别就在于:前者首先关心的是所要处理的数据,而后者首先关心的是功能。…

HOW TO:从资源管理器中拖放文件到控件

当然,这里所谓的文件是指完整的文件名称,至于文件的内容,须按实际情况进一步的操作。 我这里的控件为一个ListBox。代码如下: 重写这个HOW TO,主要的是看到有人用API实现,代码如下: VB.NET: C#:

.NET控件名称缩写一览表

标准控件 1 btn Button 2 chk CheckBox 3 ckl CheckedListBox 4 cmb ComboBox 5 dtp DateTimePicker 6 lbl Label 7 llb LinkLabel 8 lst ListBox 9 lvw ListView 10 mtx MaskedTextBox 11 cdr MonthCalendar 12 icn NotifyIcon 13 nud NumeircUpDown 14 pic PictureBox 15 prg ProgressBar 16 rdo RadioButton 17 rtx RichTextBox…

使用 BackgroundWorker 进行多线程编程

在WinForm开发过程中,如果没有采用多线程编程,经常会出现在执行某个操作时整个界面卡死,无法再做其他操作,而采用多线程编程能很好的解决这个问题,但随之而来的又有线程间控件的操作问题(.NET不允许在创建某控件之外其他线程中操作控件),下边我们用一个例子说明怎么使用BackgroundWorker解决这一系列的问题: