当前位置:  开发笔记 > 编程语言 > 正文

在WinForm标签中格式化文本

如何解决《在WinForm标签中格式化文本》经验,为你挑选了5个好方法。

是否可以格式化WinForm标签中的某些文本而不是将文本分成多个标签?请忽略标签文本中的HTML标签; 它只是用来表达我的观点.

例如:

Dim myLabel As New Label
myLabel.Text = "This is bold text.  This is italicized text."

哪个会在标签中生成以下内容:

这是粗体文字.这是 斜体文本.

TheSmurf.. 18

使用WinForms标签是不可能的.标签必须只有一种字体,只有一种尺寸和一种面.你有几个选择:

    使用单独的标签

    创建一个新的Control派生类,通过GDI +创建自己的绘图,并使用它而不是Label; 这可能是您的最佳选择,因为它可以让您完全控制如何指示控件格式化其文本

    使用第三方标签控件,可以让你插入HTML片段(有一堆 - 检查CodeProject); 这将是别人对#2的实现.


ageektrapped.. 15

不是真的,但你可以用没有边框的只读RichTextBox伪造它.RichTextBox支持RTF格式(rtf).



1> TheSmurf..:

使用WinForms标签是不可能的.标签必须只有一种字体,只有一种尺寸和一种面.你有几个选择:

    使用单独的标签

    创建一个新的Control派生类,通过GDI +创建自己的绘图,并使用它而不是Label; 这可能是您的最佳选择,因为它可以让您完全控制如何指示控件格式化其文本

    使用第三方标签控件,可以让你插入HTML片段(有一堆 - 检查CodeProject); 这将是别人对#2的实现.



2> ageektrapped..:

不是真的,但你可以用没有边框的只读RichTextBox伪造它.RichTextBox支持RTF格式(rtf).



3> Geoff..:

另一个解决办法,迟到了:如果你不想使用第三方控件,你只是希望呼吁关注一些在您的标签的文本,并且你确定有下划线,你可以使用一个LinkLabel.

请注意,许多人认为这是" 可用性犯罪 ",但如果你没有为最终用户消费而设计一些东西,那么你可能已经准备好了你的良心.

诀窍是向文本中要加下划线的部分添加禁用的链接,然后全局设置链接颜色以匹配标签的其余部分.你可以在设计时设置几乎所有必要的属性Links.Add(),但是在这里它们是代码:

linkLabel1.Text = "You are accessing a government system, and all activity " +
                  "will be logged.  If you do not wish to continue, log out now.";
linkLabel1.AutoSize = false;
linkLabel1.Size = new Size(365, 50);
linkLabel1.TextAlign = ContentAlignment.MiddleCenter;
linkLabel1.Links.Clear();
linkLabel1.Links.Add(20, 17).Enabled = false;   // "government system"
linkLabel1.Links.Add(105, 11).Enabled = false;  // "log out now"
linkLabel1.LinkColor = linkLabel1.ForeColor;
linkLabel1.DisabledLinkColor = linkLabel1.ForeColor;

结果:

在此输入图像描述


哦,很棒.我从来不知道链接标签可以将特定区域作为链接.这实际上比我搜索的用例更接近于这里提出的实际问题; 无论如何,我的标签是可点击的.现在只有一个可点击区域好多了.

4> Nigrimmist..:

为我工作的解决方案 - 使用自定义RichEditBox.使用正确的属性,它将被视为具有大胆支持的简单标签.

1)首先,添加具有禁用插入符号的自定义RichTextLabel类:

public class RichTextLabel : RichTextBox
{
    public RichTextLabel()
    {
        base.ReadOnly = true;
        base.BorderStyle = BorderStyle.None;
        base.TabStop = false;
        base.SetStyle(ControlStyles.Selectable, false);
        base.SetStyle(ControlStyles.UserMouse, true);
        base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

        base.MouseEnter += delegate(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Default;
        };
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x204) return; // WM_RBUTTONDOWN
        if (m.Msg == 0x205) return; // WM_RBUTTONUP
        base.WndProc(ref m);
    }
}

2)将句子拆分为具有IsSelected标志的单词,以确定该单词是否应为粗体或否:

        private void AutocompleteItemControl_Load(object sender, EventArgs e)
    {
        RichTextLabel rtl = new RichTextLabel();
        rtl.Font = new Font("MS Reference Sans Serif", 15.57F);
        StringBuilder sb = new StringBuilder();
        sb.Append(@"{\rtf1\ansi ");
        foreach (var wordPart in wordParts)
        {
            if (wordPart.IsSelected)
            {
                sb.Append(@"\b ");
            }
            sb.Append(ConvertString2RTF(wordPart.WordPart));
            if (wordPart.IsSelected)
            {
                sb.Append(@"\b0 ");
            }
        }
        sb.Append(@"}");

        rtl.Rtf = sb.ToString();
        rtl.Width = this.Width;
        this.Controls.Add(rtl);
    }

3)添加函数将文本转换为有效的rtf(支持unicode!):

   private string ConvertString2RTF(string input)
    {
        //first take care of special RTF chars
        StringBuilder backslashed = new StringBuilder(input);
        backslashed.Replace(@"\", @"\\");
        backslashed.Replace(@"{", @"\{");
        backslashed.Replace(@"}", @"\}");

        //then convert the string char by char
        StringBuilder sb = new StringBuilder();
        foreach (char character in backslashed.ToString())
        {
            if (character <= 0x7f)
                sb.Append(character);
            else
                sb.Append("\\u" + Convert.ToUInt32(character) + "?");
        }
        return sb.ToString();
    }

样品

对我来说就像一个魅力!解决方案编译自:

如何在C#中将字符串转换为RTF?

在富文本框中格式化文本

如何在RichTextBox中隐藏插入符号?



5> Phil..:

    在wordpad中将文本创建为RTF文件

    创建没有边框的富文本控件,editable = false

    将RTF文件作为资源添加到项目中

    在Form1_load中

    myRtfControl.Rtf = Resource1.MyRtfControlText

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有