我新建一个WINDOWS应用程序 在FORM1里面放了一个文本框textbox1我想让文本框只显示下面的横线 具体该怎么做 我也只是有些写法 但是具体写在哪里 能不能详细的告诉我  先谢谢了!

解决方案 »

  1.   

    textbox下面放个label 设置text为-------------
    设置好位置就行了
      

  2.   


    textBox 比较多的话这个方法就不怎么合适啦 :p
    TextBox tb = new TextBox();
    // tb.BackColor = this.BackColor;
    tb.BorderStyle = BorderStyle.None;
    tb.Margin = new Padding(0, 0, 0, 1);
    tb.Width = 200;Panel p = new Panel();
    p.AutoSize = true;
    p.AutoSizeMode = AutoSizeMode.GrowAndShrink;
    p.BackColor = Color.Black;
    p.Controls.Add(tb);
    p.Location = new Point(10, 10);this.Controls.Add(p);
      

  3.   

    以前也遇到过这个问题,没有找到很适合的方法,后来写了一个自定义控件,很简单public partial class LineTextBox : TextBox
        {
            public LineTextBox()
            {
                this.Width = 100;
                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;
            protected override void WndProc(ref Message m)
            {
                base.WndProc(ref m);
                if (m.Msg == WM_PAINT)
                {
                    DrawLine();
                }
            }
            //只画底边
            private void DrawLine()
            {
                Graphics g = this.CreateGraphics();
                using (Pen p = new Pen(this._linecolor))
                {
                    g.DrawLine(p, 0, this.Height - 1, this.Width, this.Height - 1);
                }
            }
        }
      

  4.   

    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    try {
    foreach (Control T in this.Controls) {
    if ((T) is TextBox) {
    ((TextBox)T).BorderStyle = BorderStyle.None;
    e.Graphics.DrawLine(Pens.Black, new Point(T.Left, T.Top + T.Height + 1), new Point(T.Left + T.Width, T.Top + T.Height + 1));
    }
    }
    } catch {
    }
    }
      

  5.   

      private Color _linecolor = Color.Black;错误 1 找不到类型或命名空间名称“Color”(是否缺少 using 指令或程序集引用?) d:\我的文档\Visual Studio 2008\Projects\UFIDA.U8.SWTX\UFIDA.U8.SWTX.Public\UserInfor\textbox.cs 16 17 UFIDA.U8.SWTX.Public
      

  6.   

    四楼的代码需要引用哪几个DLL  11楼的哥们代码是什么意思 我没看懂 麻烦解释下! 谢了
      

  7.   


    给窗体上所有TEXTBOX控件设置无边框及绘制下划线
      

  8.   

    在TEXTBOX所在容器的Paint事件中写上以上代码即可.
      

  9.   

    忘了问了 需要引用哪几个DLL  它报Pens和Point没有引用
      

  10.   


    将鼠标移到 Pens 上,按 Ctrl+Alt+F10,如果有菜单弹出来呢,选第一项,没有的话,再说。
      

  11.   

    System.Drawing 在创建 WinForm 工程的时候,默认就有的!
      

  12.   

    我试过了 还是不行   FORM的paint事件和Form上的容器的paint都写过了 
      private void splitContainer2_Panel1_Paint(object sender, PaintEventArgs e)
            {
                try
                {
                    foreach (Control T in this.Controls)
                    {
                        if ((T) is TextBox)
                        {
                            ((TextBox)T).BorderStyle = BorderStyle.None;
                            e.Graphics.DrawLine(Pens.Black, new Point(T.Left, T.Top + T.Height + 1), new Point(T.Left + T.Width, T.Top + T.Height + 1));
                        }
                    }
                }
                catch
                {
                }        }        private void ScheduleForm_Paint(object sender, PaintEventArgs e)
            {
                try
                {
                    foreach (Control T in this.Controls)
                    {
                        if ((T) is TextBox)
                        {
                            ((TextBox)T).BorderStyle = BorderStyle.None;
                            e.Graphics.DrawLine(Pens.Black, new Point(T.Left, T.Top + T.Height + 1), new Point(T.Left + T.Width, T.Top + T.Height + 1));
                        }
                    }
                }
                catch
                {
                }
            }
      

  13.   

    楼主被大家搞糊涂了
    e.Graphics.DrawLine?
      

  14.   


    foreach (Control T in this.Controls) ?你的 TextBox 在那个容器中啊? Form? splitContainer2 ?还有代码可以简化一下撒,看得好累
    e.Graphics.DrawLine(
        Pens.Black,
        T.Left, T.Bottom, T.Right, T.Bottom);
      

  15.   

    为什么不用maskedText控件呢,它下边不就是有一条线吗
      

  16.   

    foreach (Control T in this.Controls) ?你的 TextBox 在那个容器中啊? Form? splitContainer2 ?还有代码可以简化一下撒,看得好累我的TEXTBOX在splitContainer2 里面 具体代码该怎么写??
      

  17.   

    4楼的方法在任何容器里都可以使用.
    11楼的方法,可以在FROM中正常使用,放到容器里就会有点问题
      

  18.   

    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    try {
    foreach (Control T in this.Controls) {
    if ((T) is TextBox) {
    ((TextBox)T).BorderStyle = BorderStyle.None;
    e.Graphics.DrawLine(Pens.Black, new Point(T.Left, T.Top + T.Height + 1), new Point(T.Left + T.Width, T.Top + T.Height + 1));
    }
    }
    } catch {
    }
    }因为纯手工写的代码,所以没有仔细核对,抱歉.红字部分改成 Sender 即可
      

  19.   

    从第二行到最后第二行代码复制后放到splitContainer2 _paint()
      

  20.   

    31楼的方法和11楼的方法一样 我试过了 还是不行啊  把this 换成sender 可是sender里面没有Controls属性啊
      

  21.   

    直接用maskedTextBox吧  然后TextMaskFormat.IncludeLiteral  返回用户输入和提示字符
      

  22.   


    拜托楼主多查查资料,自己也动动脑子撒!sender 是通用对象,要把 sender 转换成你需要的对象啊!下面2个方式可以实现对象转换
    ((SplitContainer)sender).Controls
    (sender as SplitContainer).Controls需要注意的是:
    sender 是引发事件的那个对象比如:由 Form 引发了 Paint 事件,则引发事件的是 Form 对象,此时
    使用 (sender as Form).Controls 正确
    使用 (sender as SplitContainer).Control 报错
      

  23.   

    把BorderStyle设成None,然后在textbox下面放一个label,把label的BackColor设成黑色,拉细点就是一条线了。