日期:2014-05-17  浏览次数:20993 次

C#做了一个无边框只有一根横线的TEXTBOX, 求大婶帮忙
本帖最后由 icelovey 于 2013-10-26 19:51:08 编辑
做了一个无边框只有一根横线的TextBox, 因为考虑到窗口变化大小, 或者只读状态变更等问题, 
里面有个重绘画线的线程,代码类似这样的

            Graphics g = this.CreateGraphics();
            g.Clear(Color.SeaShell);
            Brush b = new SolidBrush(Color.Blue);

            Pen p = new Pen(b,11);
            p.Width = 12;
            g.DrawLine(p, 100, 300, 100, 400);


但是出来一个问题, 我打开程序之后, 如果用户切换到其他程序, 比如EXCEL或者什么的, 那个TextBox上的那个横线却没有消失, 还是显示在其他程序上面?
该如何解决呢???怎么让那个横线在程序不在最前的时候看不到啊?
不知道表达清楚没??

------解决方案--------------------
可以自己自定义一个控件,以后的项目直接拖动这个控件到窗体即可。
 public partial class CustomControl1 : TextBox
    {
        public CustomControl1()
        {
            InitializeComponent();

            this.BorderStyle = BorderStyle.None;
            this.BackColor = SystemColors.Control;
        }

        private int WM_PAINT = 0x000F;
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            if (m.Msg == WM_PAINT)
            {
                Pen pen = new Pen(Brushes.Olive, 1.5f);
                using (Graphics g = this.CreateGraphics())
                {
                    g.DrawLine(pen, new Point(0, this.Size.Height - 1), new Point(this.Size.Width, this.Size.Height - 1));
                }
            }
        }
    }<