C#.NET多行TextBox,具有相同宽度的字符

如果您输入多行文本框,我该怎么做呢?

ABCDE

ABCDE

所以大E 直接位于小e之下。

如果它们在同一行,我希望它们垂直排列。

另外,使用winforms

你能把文本框上的字体设置为等宽字体吗?

在代码中,保持与默认字体相同的大小:

textBox.Font = new Font(FontFamily.GenericMonospace, textBox.Font.Size); 

或者只是更改设计器中的Font属性。

您可以使用固定宽度字体来完成此操作。 Courier系列字体通常是固定宽度的。

您可以在属性编辑器中为文本框控件设置字体。 例如,您可以将Font属性设置为Courier New,8.25pt

某些字体对不同的字符使用不同的字符宽度。 在这种字体中,“m”的宽度大于“i”的宽度。 它们被称为比例字体。 这些字体看起来更漂亮,更易于阅读。

所有字符具有相同宽度的字体称为等宽字体。 它们通常用于源代码,因为它们允许将诸如行注释之类的function对齐到代码的右侧。

使用等宽字体!

这是我用来获取所有等宽字体列表的代码:

 using System; using System.Drawing; using System.Runtime.InteropServices; namespace PE.Rendering { static class FontHelper { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] class LOGFONT { public int lfHeight; public int lfWidth; public int lfEscapement; public int lfOrientation; public int lfWeight; public byte lfItalic; public byte lfUnderline; public byte lfStrikeOut; public byte lfCharSet; public byte lfOutPrecision; public byte lfClipPrecision; public byte lfQuality; public byte lfPitchAndFamily; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string lfFaceName; } static bool IsMonospaced(Graphics g, Font f) { float w1, w2; w1 = g.MeasureString("i", f).Width; w2 = g.MeasureString("W", f).Width; return w1 == w2; } static bool IsSymbolFont(Font font) { const byte SYMBOL_FONT = 2; LOGFONT logicalFont = new LOGFONT(); font.ToLogFont(logicalFont); return logicalFont.lfCharSet == SYMBOL_FONT; } ///  /// Tells us, if a font is suitable for displaying document. ///  /// Some symbol fonts do not identify themselves as such. ///  ///  static bool IsSuitableFont(string fontName) { return !fontName.StartsWith("ESRI") && !fontName.StartsWith("Oc_"); } public static List GetMonospacedFontNames() { List fontList = new List(); InstalledFontCollection ifc; ifc = new InstalledFontCollection(); using (Bitmap bmp = new Bitmap(1, 1)) { using (Graphics g = Graphics.FromImage(bmp)) { foreach (FontFamily ff in ifc.Families) { if (ff.IsStyleAvailable(FontStyle.Regular) && ff.IsStyleAvailable(FontStyle.Bold) && ff.IsStyleAvailable(FontStyle.Italic) && IsSuitableFont( ff.Name)) { using (Font f = new Font(ff, 10)) { if (IsMonospaced(g,f) && !IsSymbolFont(f)) { fontList.Add(ff.Name); } } } } } } return fontList; } } } 

尝试使用等宽或固定宽度的字体。