winform
kevin_水滴石穿
平心静气,日积月累,厚积薄发
展开
-
多线程程序写日志时遇到加锁的问题
前段时间在做项目时,系统是个多线程程序,几个线程都需要写日志,主线程和通讯线程经常在写日志时打架,为了解决这个问题,考虑在写日志的方法中加锁。代码如下: /// /// 写日志时加锁 /// private s原创 2011-09-19 15:24:56 · 4761 阅读 · 0 评论 -
C#中给RichTextBox加上背景图片
在系统自带的RichTextBox中是无法给它设置背景图片,但是我们在某些场合可能需要给RichTextBox设置背景图片。那么怎么实现这一想法呢?经过研究发现通过其它巧妙的途径可以给RichTextBox设置背景图片。首先将RichTextBox这个控件加以改写。具体改写的代码如下: public partial class richTextBoxEx : RichTextBox原创 2011-11-29 22:12:18 · 5306 阅读 · 1 评论 -
C#防止在画面上闪烁的Button
当在winform中放置很多Button控件,并且画面还有背景,每个Button都还有背景的时候,显示画面时就会产生闪烁的效果,如果机器性能好的话,画面会比较快的加载完,闪烁的情况不会很明显,但是如果机器性能不佳的话,则会给用户很差的体验。即使画面和Button采用了双缓存,效果也不明显。因此需要对C#中的Button加以重载并重写部分代码。就可以避免这种情况发生了。废话不多说了,代码如下:原创 2011-11-29 14:37:15 · 1386 阅读 · 0 评论 -
C#中给Label控件设置BackgroundImage属性
在C#中,默认情况下是无法给Label设置BackgroundImage属性的,只有Image这个属性,但是在某些特殊的情况下我们又需要设置Label的BackgroundImage属性,因此我们必须对label控件加以改造。Label是继承自Control类的,而Control类是有BackgroundImage这个属性的,Label也有这个属性,只是在VS中我们无法看到而已,微软做了下处理,不原创 2011-12-02 09:28:33 · 5039 阅读 · 1 评论 -
在C#中SendMessage和PostMessage的参数传递
在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);BOOL PostMessage(原创 2011-10-30 20:35:56 · 2889 阅读 · 0 评论 -
C#中在panel上写文字并换行的方法
前段时间在优化项目时,突然想到在Panel上显示文字并换行的问题。当有一段文字需要显示并且最好是显示在Panel。于是我就动手写了下,做了一个Demo程序,现在将主要的代码贴出来,如果存在不足还希望能够帮忙提意见,以补充完善./// summary> /// 显示文本时需要用到的方法 /// /summary> int lineDistan原创 2011-12-04 19:06:45 · 4709 阅读 · 0 评论 -
用C#编程删除系统自带游戏
摘要:本文通过编程删除了windows2000中的四个系统自带的游戏,在编写过程中用树状视图和列表视图方式显示了windows2000中隐含的DllCache目录及该目录下的文件。 正文近来,许多企业、机关为控制员工上班时间玩游戏,制定了许多制度,但并没有将游戏删除,尤其是系统自带的游戏程序,自从windows 2000采用了动态缓存目录的保护措施以来,我们通常用原来的方法在删除系统自转载 2011-12-05 17:26:05 · 812 阅读 · 0 评论 -
用C#实现智能设备上的NotifyIcon类
前几天有网友问.NET CF中怎么实现NotifyIcon,我这才知道原来.NET CF并没有提供NotifyIcon控件。 于是偶想PC上可以用Shell_NotifyIcon和MessageWindow来实现托盘图标,只是不知道.NET CF支持不支持这两个东东了。仔细看了一下.NET CF中可疑的命名空间,没想到在Microsoft.WindowsCE.Forms命名空间里面竟然有转载 2011-12-08 09:14:57 · 765 阅读 · 0 评论 -
C# 在winform画面上点击某个区域造成按钮按下效果的方法
在Winform的窗体中,存在背景图的情况下,不想在画面上加入按钮,只希望利用窗体自身的几个事件来实现按钮按下的效果,怎么样实现呢?其实这也不难,只需要按照下列步骤即可实现,首先确定要按下的几个区域的坐标点和大小,准备好按下和弹出的图片,将这些坐标点和大小组成一个个区域(使用GraphicsPath来完成)。然后使用几个Flage标志,标识是否区域的按下。具体实现的代码如下: ///原创 2011-12-21 14:18:26 · 3744 阅读 · 0 评论 -
总结几种C#窗体间通讯的处理方法
应用程序开发中,经常需要多窗体之间进行数据通信,写几个例子,把几种常用的通信方式总结一下:主窗体Form1是一个ListBox,单击选中某列时,弹出窗体Form2,Form2中两个控件,一个是TextBox,显示选中的该列的文本,另一个是按钮,点击时将修改后的值回传,且在Form1中修改相应的列的文本,同时Form2关闭。C#窗体间通讯方法一:传值最先想到的,Form2构造函数中接收一转载 2011-12-28 09:15:08 · 749 阅读 · 0 评论 -
winform中怎样使DataGridView的某一列可以添加两个Button控件
今天在网上逛的时候,看到了一个童靴提的这个问题,看了帖子,发现楼主最终给出了自己的解决方案,感觉还不错,因此将帖子的内容整理了下,转出来了解决方案的思路是这样:分别创建三个新的按钮模板列,第一个显示删除图片,第二个显示编辑图片,第三个显示添加图片.看代码第一个按钮模板列的代码:using System;using System.Windows.Forms;namespace转载 2012-01-29 13:52:14 · 2515 阅读 · 0 评论 -
将devexpress中控件添加到vs工具箱中
在控制台转到目录D:\Program Files\DevExpress 2010.2\Components\Tools(安装目录)下,执行下面的命令:ToolboxCreator.exe /ini:toolboxcreator.ini如果要删除:ToolboxCreator.exe /ini:toolboxcreator.ini /remove转载 2013-03-05 15:41:02 · 8948 阅读 · 0 评论 -
C1控件的破解步骤
最近接触了一个系统中的打印和报表控件用到了C1控件,控件在以前就注册了的,可是在这次修改了系统后,系统却提示C1的控件没有注册。怎么回事呢?我们这次并没有修改报表,而且也没有和C1控件相关的改动。怎么就出问题了。经过2天的调查终于明白了,由于发布系统的电脑在前段时间重装了系统,但是没有安装C1控件并注册,所以即使以前的代码进行了注册,但是在编译后系统运行时还是会显示要求注册。查看代码发原创 2013-06-30 11:54:15 · 6475 阅读 · 1 评论 -
一个web.Config或app.Config自定义段configSections的示例
一个web.Config或app.Config自定义段configSections的示例转载 2014-05-06 22:51:22 · 995 阅读 · 0 评论 -
Config程序配置文件操作实践进阶之ConfigurationSectionGroup
今天又进一步对System.Configuration下的ConfigurationSectionGroup类及相关的类与方法进行了研究。发现要构建多层次嵌套的XML标签 则必须用到ConfigurationSectionGroup类我们看一下下面这个XML文件:转载 2014-05-06 23:06:33 · 635 阅读 · 0 评论 -
C# 实现屏幕键盘 (ScreenKeyboard)
要实现一个屏幕键盘,需要监听所有键盘事件,无论窗体是否被激活。因此需要一个全局的钩子,也就是系统范围的钩子。什么是钩子(Hook) 钩子(Hook)是Windows提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先 启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通 过系统调用,把它挂入系统。每当特定的消息发出,转载 2011-11-06 20:06:50 · 1154 阅读 · 0 评论 -
Invoke and BeginInvoke
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate。 一、为什么Control类提供了Invoke和BeginInvoke机制?关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。1、windows程序消息机制Windows GUI程序是基于消息机制的,有个主线程维护着一转载 2011-11-04 17:18:04 · 561 阅读 · 0 评论 -
C#中使用DOS命令关闭当前正在运行的程序并重新启动
在C#中可以利用通过Pocess.Start调用Dos命令来完成很多操作,而且非常方便。例如关闭当前的应用程序,重新启动电脑等。 下面介绍几个常用的命令://重新启动电脑的命令private void RestartPC(){ //重启电脑的命令发出 Process.Start("shutdown.exe", "-r");原创 2011-11-01 14:49:33 · 3269 阅读 · 0 评论 -
C#获取键盘和鼠标操作的时间的类
最近在开发项目时需要实现屏保功能,即用户在设定的时间内没有对系统进行操作时,系统将会自动进入屏保状态。为此封装了一个获取鼠标键盘动作的类,并有一个方法可以返回用户多长时间没有操作系统的时间。代码如下:public class MouseKeyBoardOperate原创 2011-09-19 16:06:16 · 1022 阅读 · 0 评论 -
C#中动态创建一系列控件并初始化
在项目中有时需要动态创建一系列的控件,并初始化它们,下面展示一个我在项目中应用到方法: /// /// 创建并初始化所有的图片控件和标签控件 /// private void InitialAllContr原创 2011-09-20 13:42:22 · 1959 阅读 · 0 评论 -
使用消息来处理多线程程序中的一些问题
今年上半年做项目时遇到了一个问题,就是系统在运行的过程中,点击程序到显示画面,另外一个线程接收到信息需要将画面的局部进行更新。考虑到是跨线程的操作,直接处理的话就会出现错误。因此使用消息的方式来处理,问题得到了解决。现在将示例代码贴出来演示下: //自定义消息publ原创 2011-09-20 15:17:28 · 566 阅读 · 0 评论 -
在Winform中点击按钮时不显示边框
前段时间在做一个项目时,由于系统是使用触摸屏进行操作的,在用户点击按钮时会有一个边框出现,刚开始我对按钮的属性进行了如下设置: btnWineCupIntro.FlatAppearance.BorderSize = 0; btnWineCu原创 2011-09-21 15:13:17 · 1641 阅读 · 0 评论 -
点击按钮时显示按钮被按下的效果
在实际项目中,为了提供给用户更加好的用户体验,在点击按钮时,要能显示按钮被按下时的状态,给用户一种动态的感觉。其实这在程序中实现起来也比较容易,只需多一张按钮背景图片即可,在按钮没有按下或者弹起时显示一种状态图,在按钮被压下时显示另外一种状态图。原创 2011-09-26 17:17:38 · 1885 阅读 · 0 评论 -
Winform中使用控件名来查找窗体或者容器中的控件
在项目中经常遇到要动态生成控件,动态显示指定的控件或者隐藏,这就要涉及到查找控件的问题。 下面介绍下Winform中使用控件名来查找窗体或者容器中的控件的方法,代码如下: /// /// 通过控件名获取控件 /// /// ///原创 2011-10-25 15:44:33 · 3893 阅读 · 0 评论 -
C#中在窗体间使用消息来处理相关联的事件
在项目中有这样的需求,在主窗体隐藏时或者主进程运行时对其它窗体的控件或者事件进行控制,而且其它窗体是处于活动状态,而主窗体或者主进程是隐藏在后面的。这个时候使用句柄和消息来处理就比较好解决这些问题了,当然了也可以使用其它方法。比如将其它窗体在主窗体中申明并且定义,使之和主窗体一样一直存在于内存中,在各个窗体中申明公共方法,在主进程需要调用时直接调用即可,但是这样耗费了大量的系统资源。现在使用消息来原创 2011-10-30 20:13:14 · 988 阅读 · 0 评论 -
c# 判断网络是否连接
win32 API函数的做法: 要用的函数:InternetGetConnectedState 函数原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved); 参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。 INTERNE转载 2011-10-31 23:21:38 · 1198 阅读 · 0 评论 -
用C#调用Windows API向指定窗口发送
原文转载自http://www.51testing.com/?uid-175761-action-viewspace-itemid-227073一、调用Windows API。 C#下调用Windows API方法如下: 1、引入命名空间:using System.Runtime.InteropServices; 2、引用需要使用的方法,格式:[DllImport("DLL文件转载 2011-10-30 20:55:11 · 4485 阅读 · 0 评论 -
解决绘图中闪烁的问题(C#)
如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码:请在构造函数里面底下加上如下几行:SetStyle(ControlStyles.UserPaint, true);SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.转载 2011-10-31 23:26:55 · 3200 阅读 · 2 评论 -
Winform中扩展Panel使之具备双缓存,防止闪屏
最近在开发项目的过程中,发现了系统经常会出现闪屏的现象,而启用双缓存后可以有效的解决这一问题。同时为了方便引用开发了一个具备了双缓存的Panel控件。其实要启用双缓存很简单,只需要在控件或者窗体的构造函数中加入以下的3行代码即可。扩展其它控件也是如此。关于双缓存的介绍请见上次转载的文摘解决绘图中闪烁的问题(C#)有介绍。 public class Panel原创 2011-11-01 15:23:28 · 2372 阅读 · 0 评论 -
能够分页显示的Label控件
话说分页这玩意在开发中可是相当的常见。网上到处都是分页的资料。可是在Winform中要做到分页显示文本内容就没有那么容易。而且不能使用一些可以分页的控件,比较DateGridView等。只好在已有的代码基础上开发了一个具备分页功能,并且可以改变行间距的Label。代码写的比较长,可以拷贝下来直接使用,体验下。using System;using System.ComponentMo原创 2011-11-01 15:47:57 · 1392 阅读 · 0 评论 -
使用ImessageFilter接口实现截获键盘或者鼠标的消息
在C#中可以使用IMessageFilter 接口来截获应用程序的消息I MessageFilter 接口允许应用程序在消息被调度到控件或窗体之前捕获它。可以将实现 IMessageFilter 接口的类添加到应用程序的消息泵中,以在消息被调度到控件或窗体之前将它筛选出来或执行其他操作。若要将消息筛选器添加到应用程序的消息泵中,请使用 Application 类中的AddMessageFilter原创 2011-11-02 11:27:59 · 3667 阅读 · 1 评论 -
C# winform 捕获全局异常
using System;using System.Collections.Generic;using System.Windows.Forms;using System.IO;namespace GobalException{ static class Program { /// /// 应用程序的主入口点。转载 2011-11-02 15:43:43 · 800 阅读 · 0 评论 -
C#中将结构类型数据存储到二进制文件中方法
以往在vb6,v转载 2014-07-13 11:49:20 · 5771 阅读 · 0 评论