为什么在访问 RichTextBox 的 RTF 时会出现此错误?

Why does this error show up accessing the RTF of a RichTextBox?

提问人:Rick Ellison 提问时间:11/7/2023 最后编辑:LarsTechRick Ellison 更新时间:11/7/2023 访问量:69

问:

我的应用程序上有许多富文本框,用于打印从数字调制解调器类型设备接收的数据。有时有必要将一个窗口复制到另一个窗口,因为 RTF 窗口中的某些文本以某种方式着色和格式,我认为最好的方法是将窗口的 RTF 复制到另一个窗口。但是当我运行程序并尝试复制文本时,如果我破坏代码并尝试手动读取 RTF,则在运行模式下 r 会出现相同的错误。

?Hostform.rtfRX(0).TextRTF

'Hostform.rtfRX(0).TextRTF' threw an exception of type 'System.MissingMemberException'
    ClassName: Nothing
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2146233070
    HelpLink: Nothing
    InnerException: Nothing
    MemberName: Nothing
    Message: "Public member 'TextRTF' on type 'RichTextBox' not found."
    Signature: Nothing
    Source: "Microsoft.VisualBasic"
    StackTrace: "   at Microsoft.VisualBasic.CompilerServices.Symbols.Container.GetMembers(String& MemberName, Boolean ReportErrors)" & vbCrLf & "   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)" & vbCrLf & "   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)"
    TargetSite: {System.Reflection.MemberInfo[] GetMembers(System.String ByRef, Boolean)}

我使用相同的错误。RTF 或 .文本RTF 我不明白为什么当我使用富文本框时找不到 RTF。我正在使用 WinForm 并确保使用了正确类型的 RTF。

我需要什么特别的东西来打开 RTF 输出吗?

vb.net WinForms RichTextBox

评论

0赞 LarsTech 11/7/2023
.Net RichTextBox 控件没有属性。TextRTF
0赞 Rick Ellison 11/7/2023
我也尝试过.rtf,它抛出相同的错误......
0赞 LarsTech 11/7/2023
Rtf是有效属性。您的帖子只是没有包含足够的信息来帮助您。
0赞 Idle_Mind 11/7/2023
这似乎在错误的地方......?
0赞 jmcilhinney 11/7/2023
你是如何得到这个具体输出的?我以为您一定在使用“即时”窗口,但即使我确实使用了不存在的成员,我也会得到不同的输出。

答:

2赞 jmcilhinney 11/7/2023 #1

看来您所做的是通过 的引用来访问的。这一开始就很糟糕。你应该有几乎所有的时间,并相应地编写你的代码。我在我的表单中添加了一个,并通过“即时”窗口中生成的字段直接访问它,我得到了这个结果:RichTextBoxObjectOption Strict OffOption Strict OnRichTextBox

?RichTextBox1.Rtf
"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang2057{\fonttbl{\f0\fnil Segoe UI;}}" & vbCrLf & "{\*\generator Riched20 10.0.22621}\viewkind4\uc1 " & vbCrLf & "\pard\f0\fs18 Hello\par" & vbCrLf & "World\par" & vbCrLf & "}" & vbCrLf
?RichTextBox1.TextRTF
Nothing

然后我这样做了:

Option Strict Off

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim x As Object = RichTextBox1
    End Sub

End Class

并在“即时”窗口中使用了该变量,并得到了以下结果:x

?x.Rtf
"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang2057{\fonttbl{\f0\fnil Segoe UI;}}" & vbCrLf & "{\*\generator Riched20 10.0.22621}\viewkind4\uc1 " & vbCrLf & "\pard\f0\fs18 Hello\par" & vbCrLf & "World\par" & vbCrLf & "}" & vbCrLf
?x.RTF
"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang2057{\fonttbl{\f0\fnil Segoe UI;}}" & vbCrLf & "{\*\generator Riched20 10.0.22621}\viewkind4\uc1 " & vbCrLf & "\pard\f0\fs18 Hello\par" & vbCrLf & "World\par" & vbCrLf & "}" & vbCrLf
?x.TextRTF
'x.TextRTF' threw an exception of type 'System.MissingMemberException'
    ClassName: Nothing
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2146233070
    HelpLink: Nothing
    InnerException: Nothing
    MemberName: Nothing
    Message: "Public member 'TextRTF' on type 'RichTextBox' not found."
    Signature: Nothing
    Source: "Microsoft.VisualBasic.Core"
    StackTrace: "   at Microsoft.VisualBasic.CompilerServices.Symbols.Container.GetMembers(String& memberName, Boolean reportErrors)" & vbCrLf & "   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateGet(Object instance, Type type, String memberName, Object[] arguments, String[] argumentNames, Type[] typeArguments, Boolean[] copyBack)" & vbCrLf & "   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)"
    TargetSite: {System.Reflection.MemberInfo[] GetMembers(System.String ByRef, Boolean)}

你应该从开始,所以你拥有的代码不应该编译。无论是否必须,都应该将该引用强制转换为对象的实际类型,然后可以直接访问该类型的成员,而无需后期绑定。以我为例:Option Strict OnObject

?DirectCast(x, RichTextBox).TextRTF
Nothing

评论

0赞 LarsTech 11/7/2023
VB6 RichTextBox 具有一个属性。也许 OP 正在尝试运行转换为 .net 的版本。TextRTF
0赞 jmcilhinney 11/7/2023
@LarsTech,根据我所看到的,.NET 必须具有具有该名称的私有属性或字段。正如你所看到的,我在引用上使用它时得到了它,而一个绝对不存在的属性产生了一个错误。使用后期绑定时,错误消息明确指出没有具有该名称的 PUBLIC 成员。RichTextBoxNothingRichTextBox
0赞 Rick Ellison 11/7/2023
@jmcilhinney 你击中了它的头,我只是在看这个问题,想知道为什么它不起作用。谢谢。。
0赞 Jimi 11/7/2023
textRtf是一个私有字段,用于在 RichTextBox 控件处于过渡状态(即未创建或正在重新创建句柄)时存储文本。不应使用,在指定属性时,它可能为 nullText