提问人:Rick Ellison 提问时间:11/7/2023 最后编辑:LarsTechRick Ellison 更新时间:11/7/2023 访问量:69
为什么在访问 RichTextBox 的 RTF 时会出现此错误?
Why does this error show up accessing the RTF of a RichTextBox?
问:
我的应用程序上有许多富文本框,用于打印从数字调制解调器类型设备接收的数据。有时有必要将一个窗口复制到另一个窗口,因为 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 输出吗?
答:
2赞
jmcilhinney
11/7/2023
#1
看来您所做的是通过 的引用来访问的。这一开始就很糟糕。你应该有几乎所有的时间,并相应地编写你的代码。我在我的表单中添加了一个,并通过“即时”窗口中生成的字段直接访问它,我得到了这个结果:RichTextBox
Object
Option Strict Off
Option Strict On
RichTextBox
?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 On
Object
?DirectCast(x, RichTextBox).TextRTF Nothing
评论
0赞
LarsTech
11/7/2023
VB6 RichTextBox 具有一个属性。也许 OP 正在尝试运行转换为 .net 的版本。TextRTF
0赞
jmcilhinney
11/7/2023
@LarsTech,根据我所看到的,.NET 必须具有具有该名称的私有属性或字段。正如你所看到的,我在引用上使用它时得到了它,而一个绝对不存在的属性产生了一个错误。使用后期绑定时,错误消息明确指出没有具有该名称的 PUBLIC 成员。RichTextBox
Nothing
RichTextBox
0赞
Rick Ellison
11/7/2023
@jmcilhinney 你击中了它的头,我只是在看这个问题,想知道为什么它不起作用。谢谢。。
0赞
Jimi
11/7/2023
textRtf
是一个私有字段,用于在 RichTextBox 控件处于过渡状态(即未创建或正在重新创建句柄)时存储文本。不应使用,在指定属性时,它可能为 nullText
评论
TextRTF
Rtf
是有效属性。您的帖子只是没有包含足够的信息来帮助您。?