Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有虚线的文本框,用于打字_C#_Winforms_Textbox_Windows Forms Designer - Fatal编程技术网

C# 带有虚线的文本框,用于打字

C# 带有虚线的文本框,用于打字,c#,winforms,textbox,windows-forms-designer,C#,Winforms,Textbox,Windows Forms Designer,我想创建一条虚线,作为输入,在上面键入文本,而不是使用文本框。 例如: 而不是文本框: 我想做这样的东西: private void Panel1_Paint(object sender, PaintEventArgs e) { using (Pen p = new Pen(Color.Black)) { p.DashStyle = DashStyle.Dash; e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox

我想创建一条虚线,作为输入,在上面键入文本,而不是使用文本框。
例如:
而不是文本框:

我想做这样的东西:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}


并能够在其上键入。

在承载无边框文本框控件的面板的绘制事件中,您可以如下所示绘制它:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}
最后看起来像这样:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}

在承载无边框文本框控件的面板的绘制事件中,您可以这样绘制它:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}
最后看起来像这样:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}

您可以尝试使用从TextBox派生的自定义控件。
覆盖其WndProc和处理,可以在编辑控件的ClientArea内绘制虚线/虚线(或任何其他内容)。然后在按下键时刷新线条图,这样线条就不会被擦除

WM_KEYDOWN
WM_LBUTTONDOWN
WM_CAPTURECHANGED
也会被处理,因为这些会导致背景的绘制

使用的和方法计算基线的位置,然后向下移动用于绘制基线的笔的大小。
被重写以在字体更改时获取通知

这里有更多信息:

它有点生,但看看它是怎么回事:)

看起来是这样的:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}


如果您不知道如何使用此代码:

  • 向项目中添加一个新类,并将其命名为
    TextBoxBaseline
  • 使用您在此处找到的指令复制
    ,并将它们粘贴到类的顶部
  • 复制其余代码并替换类文件中的默认类定义,而不删除命名空间
  • 构建项目
  • 您将在工具箱中找到
    TextBoxBaseline
    控件。打开一张表格,像往常一样放在上面

您可以尝试使用从TextBox派生的自定义控件。
覆盖其WndProc和处理,可以在编辑控件的ClientArea内绘制虚线/虚线(或任何其他内容)。然后在按下键时刷新线条图,这样线条就不会被擦除

WM_KEYDOWN
WM_LBUTTONDOWN
WM_CAPTURECHANGED
也会被处理,因为这些会导致背景的绘制

使用的和方法计算基线的位置,然后向下移动用于绘制基线的笔的大小。
被重写以在字体更改时获取通知

这里有更多信息:

它有点生,但看看它是怎么回事:)

看起来是这样的:

private void Panel1_Paint(object sender, PaintEventArgs e) {
  using (Pen p = new Pen(Color.Black)) {
    p.DashStyle = DashStyle.Dash;
    e.Graphics.DrawLine(p, new Point(textBox1.Left, textBox1.Bottom + 2),
                           new Point(textBox1.Right, textBox1.Bottom + 2));
  }
}


如果您不知道如何使用此代码:

  • 向项目中添加一个新类,并将其命名为
    TextBoxBaseline
  • 使用您在此处找到的指令复制
    ,并将它们粘贴到类的顶部
  • 复制其余代码并替换类文件中的默认类定义,而不删除命名空间
  • 构建项目
  • 您将在工具箱中找到
    TextBoxBaseline
    控件。打开一张表格,像往常一样放在上面

这些虚线是否在文本框内?比如,如果你按“A”,它会替换其中一个破折号?或者破折号像下划线?我不想要文本框的边框,我只想要像下划线一样的虚线,并且能够在上面打字。在面板(或用户控件)中放置一个无边框的文本框,并在该面板(或用户控件)的绘制事件中绘制虚线。@LabinotAziri你做过任何研究吗?关于如何使用控件的绘制事件,有很多参考资料,这些虚线在文本框中吗?比如,如果你按“A”,它会替换其中一个破折号?或者破折号像下划线?我不想要文本框的边框,我只想要像下划线一样的虚线,并且能够在上面打字。在面板(或用户控件)中放置一个无边框的文本框,并在该面板(或用户控件)的绘制事件中绘制虚线。@LabinotAziri你做过任何研究吗?有很多关于如何使用控件的绘制事件的资源