我的用户进行了大量的双向文本编辑,他们在文本中撒上一些从左到右和/或从右到左的标记并不罕见。有时他们想查看这些标记在文本中的位置,以便移动或删除它们。
Windows 窗体中的控件TextBox提供了一个默认上下文菜单,其中包含一些与 Unicode 相关的条目,其中之一是“显示 Unicode 控制字符”
启用此选项将强制控件为那些不可打印的字符绘制在相应字体中定义的字形。
例如,如果我将控件Text的属性设置TextBox为"Hello \u200E World!"并启用此选项,我将使用字体文件中定义的字形呈现 LRM 字符(使用的字体是 Segoe UI)。
如果我们在字体编辑软件(我使用 FontForge)中打开 Segoe UI 字体,我们可以看到确实有为 LRM和RLM代码点定义的字形。
我还发现StringFormatFlags枚举可用于控制这些字符在 GDI+ 中的呈现方式,特别是通过DisplayFormatControl向StringFormat对象提供标志:
private void Form_Paint(object sender, PaintEventArgs e)
{
var text = "Hello \u200E World!";
var g = e.Graphics;
// Will draw LRM symbol with its representative glyph
var fmt = new StringFormat(StringFormatFlags.DisplayFormatControl); …Run Code Online (Sandbox Code Playgroud)