【问题标题】:Is it possible to style text in a richtextbox at design time?是否可以在设计时在富文本框中设置文本样式?
【发布时间】:2011-02-28 10:01:10
【问题描述】:

我有一个 System.Windows.Forms.RichTextBox,我希望用它来向我的应用程序用户显示一些说明。

是否可以将我在设计时输入的某些文本设置为粗体?

或者我别无选择,只能在运行时执行?

【问题讨论】:

    标签: vb.net visual-studio .net-2.0 richtextbox design-time


    【解决方案1】:

    向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上。选择 RichText 属性并单击带有点的按钮。这将启动写字板。编辑文本,键入 Ctrl+S 并关闭写字板。请注意,当 Wordpad 打开时,Visual Studio 设计器无法正常工作。

    Imports System.ComponentModel
    Imports System.Drawing.Design
    Imports System.IO
    Imports System.Diagnostics
    
    Public Class MyRtb
        Inherits RichTextBox
    
        <Editor(GetType(RtfEditor), GetType(UITypeEditor))> _
        Public Property RichText() As String
            Get
                Return MyBase.Rtf
            End Get
            Set(ByVal value As String)
                MyBase.Rtf = value
            End Set
        End Property
    
    End Class
    
    Friend Class RtfEditor
        Inherits UITypeEditor
    
        Public Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle
            Return UITypeEditorEditStyle.Modal
        End Function
    
        Public Overrides Function EditValue(ByVal context As ITypeDescriptorContext, ByVal provider As IServiceProvider, ByVal value As Object) As Object
            Dim fname As String = Path.Combine(Path.GetTempPath, "text.rtf")
            File.WriteAllText(fname, CStr(value))
            Process.Start("wordpad.exe", fname).WaitForExit()
            value = File.ReadAllText(fname)
            File.Delete(fname)
            Return value
        End Function
    End Class
    

    【讨论】:

    • 如何扩展表单设计器/组件模型的非常酷的示例。
    • 太棒了!你拯救了我的一天......遗憾的是 Visual Studio 在设计时没有提供该功能......为你 +1
    • 这看起来像我所追求的。在将格式化的编辑文本放入设计视图方面工作得很好。但是,在编译和运行时 - 它会恢复为纯格式文本。 :( 使用 VS2013 express + .net 4.5 - 所以现在不确定这个解决方案是否太旧了。耻辱 - 对这个解决方案感到非常兴奋!
    • @stigzler:今天在 VS2013 上尝试过(不是 express),将其转换为 C#(并将 WordPad 更改为 WinWord,以便我可以管理行高):就像一个魅力!
    • 在设计时它运行良好,但在运行时我只有纯文本。解决方案:在 InitializeComponent() 中,需要将两行的顺序更改为以下顺序:Me.RtfEdit1.Text = resources.GetString("RtfEdit1.Text")Me.RtfEdit1.RichText = resources.GetString("RtfEdit1.RichText") .Text=... .RichText=... 和 之后删除所有格式!
    【解决方案2】:

    您当然可以在 RTF 编辑器(例如 WordPad)中创建一个 RTF 文档,保存文件,将其作为文本/纯文本文件打开,然后在设计时将 RTF 文档复制到您的RichTextBoxRtfText 属性中。

    但我建议不要这样做。这样一来,您的代码中就有大量数据,而这样做毫无意义。毕竟,使用资源就是他们的目的。您可以在设计时将各个资源绑定到控制属性。

    【讨论】:

      【解决方案3】:

      我发现 codeproject 上的这个链接非常有用:

      http://www.codeproject.com/KB/miscctrl/richtextboxextended.aspx

      它是一个完全工作的 rtf 编辑控件,围绕标准 .net RichtTextBox 控件构建,具有良好的结构化代码。它展示了如何使用控件的几乎所有可用功能。

      但是,它是用 c# 而不是 vb.net 编写的,但你一定要看看。

      【讨论】:

        【解决方案4】:

        Bravo - 简单高效!这也是一个小的修正,因为参数是带有空格的长字符串,所以下一行包含必需的引号:

        Process.Start("wordpad.exe", """" & fname & """").WaitForExit() 
        

        【讨论】:

          猜你喜欢
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          • 2016-03-12
          • 1970-01-01
          • 1970-01-01
          • 2012-01-30
          • 2017-05-23
          • 1970-01-01
          相关资源
          最近更新 更多