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
覆盖其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