随笔分类 -  winform

C/S架构
摘要:做个项目需要用到DataGridView,这个控件还是挺好用的,但是今天却发现无法实现自己想要的功能。主要是DataGridViewCheckBoxColumn这个列虽然是提供了复选框,但是却未能在复选框的旁边提供文本的显示。在网上搜索了一下,提供的方法很多都是弄两列,然后合并单元格,将两列合并成为... 阅读全文
posted @ 2014-09-24 16:57 古兰色回忆 阅读(6097) 评论(1) 推荐(7)
摘要:public sealed class Clock : PictureBox { public Clock() { SetStyle(ControlStyles.AllPaintingInWmPaint, true); ... 阅读全文
posted @ 2014-06-23 17:38 古兰色回忆 阅读(991) 评论(2) 推荐(2)
摘要:闲来无事,从网上找了不少自定义控件,然后整理了一下,做了一个水晶按钮 /// /// 表示 Windows 的按钮控 /// [Description("表示 Windows 的按钮控件"), DefaultEvent("Click"), ToolboxBitmap(ty... 阅读全文
posted @ 2014-06-19 16:09 古兰色回忆 阅读(758) 评论(0) 推荐(0)
摘要:闲着没事,准备做一个类似于TeeChart的自定义控件,结果第一步的绘图就把我给难倒了,虽然早就知道GDI绘图的闪烁问题很坑,但是却没有想到如此之坑,折腾了两天,才找到解决方法。首先在窗体加载的时候,加入双缓存,说实话以前一直没觉得这个双缓存有什么用,不过这次总算是有了点儿效果。DoubleBuff... 阅读全文
posted @ 2014-05-05 09:30 古兰色回忆 阅读(5724) 评论(0) 推荐(0)
摘要:偶然间在园里面发现了这么一个方法,看起来很有用,以后可能会用到,所以记下来。首先将窗体的 keypreview 的属性设为 true private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Right || e.KeyData == Keys.Down || e.KeyData == Keys.Enter) { // 焦点向后移动 this.SelectNextControl(this.... 阅读全文
posted @ 2014-01-20 15:28 古兰色回忆 阅读(357) 评论(0) 推荐(0)
摘要:1、首先将窗体的“Localizable”属性置为“True”,然后将“Language”属性置为自己想要的语言,点击重新生成项目例如:置为“中文”,以及“英文”。当每次置为不同的语言并重新生成项目后,将“Languate”属性再次置为默认,并重新生成项目这一系列操作后,该窗体会为每一个不同的语言生成一个窗体资源文件"窗体名称.语种.resx"英文:en-US 中文:zh-CN将这两个资源文件中控件的Text属性设置成相应语种的名称,例如英文的然后在切换语言的时候,执行以下方法为控件设置 /// /// 设置控件的 Text 属性 /// ... 阅读全文
posted @ 2014-01-16 11:04 古兰色回忆 阅读(572) 评论(0) 推荐(0)
摘要:winform窗体的样式很单一,不够漂亮,往往我们需要对窗体进行重写,但是我们又要保留在重写前窗体本身带的功能,例如拖动窗体的头进行移动之类的。一下方式可以实现该方法: [DllImport("user32")] public static extern int ReleaseCapture(); [DllImport("user32")] public static extern int SendMessage(IntPtr hwnd, int msg, int wp, int lp); /// /// 是... 阅读全文
posted @ 2014-01-07 09:59 古兰色回忆 阅读(2718) 评论(0) 推荐(1)
摘要:private void GroupBox_Paint(object sender, PaintEventArgs e) { if (sender != null && sender is GroupBox) { GroupBox gbx = sender as GroupBox; e.Graphics.Clear(gbx.BackColor); Color color = Color.Black; P... 阅读全文
posted @ 2013-12-11 15:36 古兰色回忆 阅读(5119) 评论(1) 推荐(0)
摘要:DataGridView 经常用到,但是很多东西都不熟悉,以至于总去上网查,这次我整理一下,全部都记下来,再用就方便了。1、禁止用户新建行,就是去掉最后那个行标题上带星号的那个行dataGridView1.AllowUserToAddRows = false;2、去掉左侧的行标题dataGridVi... 阅读全文
posted @ 2013-11-27 16:06 古兰色回忆 阅读(978) 评论(0) 推荐(0)
摘要:最近在做一个小软件,需要做到新建、修改动态链接库(DLL)的功能。新建很简单,但是在修改的时候我突然发现问题来了。首先软件会在启动的时候将所有协议加载出来,然后做展示。此时你可以添加或减少动态库中的属性什么的,但是你在点击保存修改就会出现异常,说什么该动态链接库已经被占用。 刚开始我在网上搜索如何卸载动态库,网上也有大神给出了方法(例如:http://www.cnblogs.com/HeroBeast/archive/2008/10/07/1305429.html),但是花了很久的事件也未能成功。后来我换了一种思路,就是将修改过的DLL重新生成一个,放在一个新的文件夹(COPY)内,此时... 阅读全文
posted @ 2013-11-21 18:10 古兰色回忆 阅读(447) 评论(0) 推荐(0)
摘要:在为 ComboBox 当定数据的时候,如果遇到界面显示需要用文本,而获取选定项的值时需要用数字,我们就很习惯使用 DataSource 来进行绑定。例如以下代码: List tvList = new List(); for (int i = 0; i /// ComboBox的Item/// public class TextValue{ public TextValue() { } public TextValue(string inText, int inValue) { this.Text = inText; this.Value = in... 阅读全文
posted @ 2013-11-21 11:39 古兰色回忆 阅读(1564) 评论(0) 推荐(0)
摘要:从网上找了些资源,借鉴整理之后,自己随便写了一个。 public class LogHelper { #region 构造函数、析构函数、单一实体 private LogHelper() { _threadWriteLog = new Thread(new ThreadStart(WriteLog)); _threadWriteLog.Start(); } ~LogHelper() { if (_threadWriteLog != ... 阅读全文
posted @ 2013-11-12 10:44 古兰色回忆 阅读(352) 评论(0) 推荐(0)
摘要:/// /// 正在拖拽的节点 /// private TreeNode DragNode = null; /// /// 节点来源 /// private TreeView NodeSource = null; /// /// 树形节点移动方向 /// private MoveTreeView MoveTo = MoveTreeView.NoMove; /// /// 当鼠标拖拽某相... 阅读全文
posted @ 2013-10-11 10:58 古兰色回忆 阅读(2804) 评论(0) 推荐(0)
摘要:虽然好像不经常用到,不过还是记下来防止以后用到 /// /// 为 DataGridView 控件添加行号 /// /// /// private void datagridview1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e... 阅读全文
posted @ 2013-09-06 09:59 古兰色回忆 阅读(259) 评论(0) 推荐(1)
摘要:新建一个类,继承IMessageFilter public class FormFilter : IMessageFilter { public bool PreFilterMessage(ref Message m) { if (m.Msg == 0x20A) return true; return false; } }在需要禁用鼠标滚轮的窗体内加入下面的代码FormFilter ff =... 阅读全文
posted @ 2013-08-20 15:19 古兰色回忆 阅读(940) 评论(0) 推荐(0)
摘要:/// <summary> /// 动态创建控件 /// </summary> /// <param name="form">窗体(需要添加控件的窗体)</param> /// <param name="controlType">控件类型(例如:System.Windows.Forms.Button)</param> /// <param name="controlName">控件名称</param> /// <param name= 阅读全文
posted @ 2013-06-17 17:10 古兰色回忆 阅读(423) 评论(0) 推荐(0)
摘要:winform 自定义控件闪烁问题极为让人头疼,在网上搜索了很多方法,最后总算是勉强解决,但老实说效果还不是很好。首先第一种方法:SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);this.UpdateStyles();网上见到的最多的就是这个方法,但基本上没有看到什么效果。第二种方法:在自定义控件中添加的: protected override CreateParams CreateParams ... 阅读全文
posted @ 2013-05-28 17:14 古兰色回忆 阅读(2618) 评论(2) 推荐(1)
摘要:private delegate void SetLabelTextCallBack(Label l, String text);/// <summary>/// 为 Label 控件设置 Text 文本/// </summary>/// <param name="l">Label</param>/// <param name="text">Text</param>private void SetLabelText(Label l, String text){ if (l.Invok 阅读全文
posted @ 2013-04-11 17:38 古兰色回忆 阅读(285) 评论(0) 推荐(0)
摘要:以前从来没有遇到过这个问题,跨线程访问控件,一般只有赋值的时候单独写委托什么的,但是这次却突然发现居然获取控件的值时,不写委托也会报错。为了防止以后忘掉,咱把方法记下来。/// /// 控件委托帮助类/// public class ControlHelper{ /// /// 跨线程设置控件属性值委托类型定义 /// delegate void SetControlPropertyCallBack(Control control, string name, object value); /// /// 跨线程设置控件属性值 /// pu... 阅读全文
posted @ 2013-03-26 14:53 古兰色回忆 阅读(510) 评论(0) 推荐(0)
摘要:private void Button_Paint(object sender, PaintEventArgs e){ Button btn = sender as Button; System.Drawing.Drawing2D.GraphicsPath btnPath = new System.Drawing.Drawing2D.GraphicsPath(); System.Drawing.Rectangle newRectangle = btn.ClientRectangle; newRectangle.Inflate(-1, -1); e.Graphics... 阅读全文
posted @ 2012-11-29 17:53 古兰色回忆 阅读(741) 评论(0) 推荐(0)