Подтвердить что ты не робот

Многострочный текстовый тег С#.NET с одинаковыми символами

Как я могу это сделать, если вы ввели многострочное текстовое поле

ABCDE

&

ABCDE

Так что большой E непосредственно ниже маленького e.

Я хочу, чтобы они выравнивались вертикально, если они находятся в одной строке.

Кроме того, используя winforms

4b9b3361

Ответ 1

Вы можете просто установить шрифт в текстовое поле monospaced один?

В коде, сохраняющем тот же размер, что и шрифт по умолчанию:

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

Или просто измените свойство Font в конструкторе.

Ответ 2

Вы можете сделать это, используя шрифт с фиксированной шириной. Курьерские семейные шрифты часто имеют фиксированную ширину.

Вы можете установить шрифт в редакторе свойств для элемента управления текстовым полем. Например, вы можете присвоить свойству Font значение Courier New, 8.25pt.

Ответ 3

Некоторые шрифты используют разные ширины символов для разных символов. В таких шрифтах "m" будет иметь большую ширину, чем "i". Они называются пропорциональными шрифтами. Эти шрифты имеют приятный вид и их легче читать.

Шрифты, где все символы имеют одинаковую ширину, называются моноширинными шрифтами. Они часто используются для исходного кода, поскольку они позволяют выравнивать функции, такие как комментарии к строке, справа от кода.

Используйте моноширинный шрифт!

Вот код, который я использую, чтобы получить список всех установленных моноширинных шрифтов:

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;
        }

        /// <summary>
        /// Tells us, if a font is suitable for displaying document.
        /// </summary>
        /// <remarks>Some symbol fonts do not identify themselves as such.</remarks>
        /// <param name="fontName"></param>
        /// <returns></returns>
        static bool IsSuitableFont(string fontName)
        {
            return !fontName.StartsWith("ESRI") && !fontName.StartsWith("Oc_");
        }

        public static List<string> GetMonospacedFontNames()
        {
            List<string> fontList = new List<string>();
            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;
        }
    }

}

Ответ 4

Попробуйте использовать шрифты с моноширинной или фиксированной шириной.