Csharp Winform TextBox 樣式以一條橫線顯示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;
using System.ComponentModel;

namespace TextboxsStyleLineControlLibrary
{
    /// <summary>
    ///csharp winform 划横线输入框
    /// 塗聚文 2012-03-27
    /// 締友計算機信息技術有限公司
    /// 捷為工作室
    /// </summary>
    [ToolboxItem(true)]
    public  class GeovinDuTextBoxLine:TextBox
    {
        private bool m_DrawLine = false;
        private const int WM_NCPAINT = 0x0085;
        private const int WM_CHAR = 0x0102;

        [System.Runtime.InteropServices.DllImport("user32.dll ")]
        static extern IntPtr GetWindowDC(IntPtr hWnd);

        [System.Runtime.InteropServices.DllImport("user32.dll ")]
        static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
        /// <summary>
        ///
        /// </summary>
        public GeovinDuTextBoxLine()
        {
            //
            //   TODO:   在此处添加构造函数逻辑
            //
            this.SetStyle(ControlStyles.DoubleBuffer, true);
            this.BorderStyle = BorderStyle.None;
        }
        private Color _linecolor = Color.Black;
        /// <summary>
        /// 线条颜色
        /// </summary>
        public Color LineColor
        {
            get
            {
                return this._linecolor;
            }
            set
            {
                this._linecolor = value;
                this.Invalidate();
            }
        }

        private const int WM_PAINT = 0xF;

        /// <summary>
        ///
        /// </summary>
        public bool DrawLine
        {
            get
            {
                return this.m_DrawLine;
            }
            set
            {
                this.m_DrawLine = value;
                this.Invalidate();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref   Message m)
        {

            base.WndProc(ref   m);
            if (m.Msg == 0xf || m.Msg == 0x133)
            {
                if (this.DrawLine)
                {
                    IntPtr hDC = GetWindowDC(m.HWnd);
                    if (hDC.ToInt32() == 0)
                    {
                        return;
                    }
                    Graphics g = Graphics.FromHdc(hDC);
                    //Brush b = Brushes.Black;
                    Pen p = new Pen(this._linecolor, 1);//b

                    Point p1 = new Point(0, this.Height - 2);
                    Point p2 = new Point(this.Width, Height - 2);
                    g.DrawLine(p, p1, p2);

                    m.Result = IntPtr.Zero;
                    ReleaseDC(m.HWnd, hDC);
                }
            }
        }   

    }
}
时间: 2025-01-21 16:53:50

Csharp Winform TextBox 樣式以一條橫線顯示的相关文章

vs2010 C# winform textbox 回车后 跳转到下一个

问题描述 vs2010 C# winform textbox 回车后 跳转到下一个 vs2010 C# winform textbox 回车后 跳转到下一个 代码如图,按回车不报错也没反应,什么原因? private void xingming_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 13) { xingbie.Focus(); } } 解决方案 在构造函数加上 xingming.KeyDown += xingming

asp.net WinForm TextBox事件的组合代码

asp教程.net winform textbox事件的组合代码 功能需求: 用户名不能为空 用户的年龄必须是一个大于或等于0的数字: 用户的地址不能为空 用户的职务必须是"software"或者为空 这个功能中我们用到了textchanged,keypress,validating事件:根据功能要求,可知用户名文本框和用户的地址的文本框用到同一个事件emptyvalidating来判断文本框是否为空: 在这个功能用用到空间的tag属性,用此来设置控件的有关数据,我们在构造函数中设置用

怎樣即時顯示該筆資料

问题描述 SqlDataSource_Orders.InsertParameters("客戶名稱").DefaultValue=LabelName.TextSqlDataSource_Orders.InsertParameters("客戶電話").DefaultValue=LabelTel.TextSqlDataSource_Orders.InsertParameters("客戶電郵").DefaultValue=LabelEmail.TextS

WinForm TextBox自定义扩展方法数据验证

本文转载:http://www.cnblogs.com/gis-crazy/archive/2013/03/17/2964132.html  查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交后台服务器更新,但数据的合法验证及值的转换却不太敢恭维,一堆的if判断和转换,便想着是否能扩展个方法出来,琢磨出个思路,记录下来与大家共同探讨,有不对的地方还请大家指正.       设计思路: 1. 由于大部分从TextBox控件中获取数据值,可以扩展个泛型方法出来,直接根据转

(源码)WinForm TextBox 实现自动索引功能

有时候在项目里面需要用到类似于百度那种自动索引的功能,在WinForm里面我采用的是用一个TextBox和一个ListBox结合来实现的,大致效果如下图所示:   详细的代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; usi

Csharp: winform PDF view control use Adobe Reader X

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using AcroPDFLib;//引用COM組件Adobe Acrobat Browser Control Type Libra

winform textbox 边框颜色

问题描述 winformtextbox怎么改版边框颜色?百度到了一个类,但是不知道怎么使用求大神告知.谢谢 解决方案 解决方案二:他的意思是重写这个控件解决方案三:引用楼主yangsh0722的回复: winformtextbox怎么改版边框颜色?百度到了一个类,但是不知道怎么使用求大神告知.谢谢 我看我同事给我的工程中,里面添加了自定义组件,可以像vs里面的控件一样拖动到界面上,里面定义的那个textbox控件就用到了上面链接里面的那个类里面的方法.不知道怎么搞的.解决方案四:把你的自定义控件

csharp: winform using Microsoft.Ink(Tablet PC API) create Signature image

/* 下載: //Microsoft Windows XP Tablet PC Edition 2005 Recognizer Pack http://www.microsoft.com/zh-cn/download/details.aspx?id=1601 //Microsoft Windows XP Tablet PC Edition Software Development Kit 1.7 http://www.microsoft.com/en-us/download/details.as

c#outlook樣式源碼,希望對對來的有所幫助

问题描述 不能上傳,我就把源碼貼出來吧,選下載一個DotNetBar.dll,拉一個sidebar控件,主要讀取菜單然後放到sidebar控件,研究了一天-但是現在不能綁定菜單事件,希望高手來改寫一下,使之能綁定菜單的click事件privatevoidInitMenu(){intpicii=10;DevComponents.DotNetBar.BaseItem[]baseitem=newDevComponents.DotNetBar.BaseItem[menuStrip1.Items.Coun