这里有专家指导我如何实现这种文本框样式,如下图所示。每个字符都是分开的,并且精确可见这是来自Windows应用程序的快照。所以我认为C#.Net winforms可以实现这一点。
答案 0 :(得分:1)
这实际上取决于你想要做什么。如果您希望用户能够编辑,那么您可能希望编写一个继承TextBoxBase的类并正确覆盖该类中的所有相应功能。这不重要。
但是,如果您只是想显示文本,那么代码实际上非常简单:
using System.Drawing;
using System.Windows.Forms;
namespace <YourNameSpaceHere>
{
class TickLabel : Control
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int x = 0;
int[] widths = _MeasureWidths(Text);
using (Pen pen = new Pen(ForeColor))
{
for (int i = 0; i < Text.Length; i++)
{
TextRenderer.DrawText(e.Graphics, Text.Substring(i, 1), Font, new Point(x, 0), ForeColor);
x += widths[i];
e.Graphics.DrawLine(pen, x, ClientSize.Height, x, ClientSize.Height - 10);
}
}
}
private int[] _MeasureWidths(string text)
{
int[] widths = new int[text.Length];
for (int i = 0; i < text.Length; i++)
{
widths[i] = TextRenderer.MeasureText(text.Substring(i, 1), Font, ClientSize, TextFormatFlags.NoPadding).Width;
}
return widths;
}
}
}
以下是结果的屏幕截图:
请注意,我已将背景颜色设置为黄色,将控件停靠在Panel
内以提供边框,并调整Panel
高度的大小以便勾选结束我想要的地方。没有太多额外的麻烦,您可以向控件添加自动调整大小的行为,以及直接支持边框。此外,我使用硬编码高度作为刻度线,但如果根据字体大小和/或控制高度缩放刻度,您可能会发现它看起来更好。
我使用了默认的Designer选择字体,但固定空间字体可能看起来更好,更适合您的需求。
如果您最终走了可编辑文本路线,上面的内容仍应该让您对基本技术有所了解。可能需要进行大量的实验才能获得看起来和工作正常的东西&#34;恰到好处的&#34;给你。