在Windows窗体应用程序中,我想编辑纯文本(目前不需要格式化),但保留文本的某些部分不可编辑。例如。以“ABC”开头,用户可以附加或添加其他文本或完全删除“ABC”,但始终将“ABC”保留为不可编辑的原子。
我的第一个想法是使用RichTextBox并添加RTF字段({\field...}
),但似乎RichTextBox不支持字段。
另一种方法可能是将不可编辑的文本添加为图片。但是,我还没有找到一种方法来可靠地防止调整图像大小。 (之前问过这个问题:Remove the ability to resize an image pasted into a richtextbox and add an event to that image. C#)
您对使用字段或图片如何使其工作有任何建议吗?或者设计所需行为的任何其他方法?
答案 0 :(得分:3)
答案 1 :(得分:0)
不幸的是,我不认为你会在WinForms中找到一个好的答案。你真正要求的是更接近一个完整的编辑器与一个小编辑框,这是RichTextBox
提供的(加上一点显示)。
如果显示非常简单,也许您可以通过在RichTextBox
旁边放置一个标签,删除它的边框并更改它的背景来匹配来摆脱它。我不是100%确定你可以让显示器显得更少或不显示(虽然可以使用WPF)。
这里虽然你通过添加和删除描述了一些更复杂的行为。为了实现这一点,我认为您可能需要创建一个新的自定义编辑控件。这在WinForms中是一个相当大的一步,可能不是你想要做的。
答案 2 :(得分:0)
不确定您是否正在使用第三方控件,但WinForms的DevExpress富文本编辑器控件具有我认为您可能正在寻找的内容......
文件保护
我们的文档保护模型基于RTF 1.9.1规范(只读密码保护和保护例外部分),因此与Microsoft®Word®文档保护功能兼容。
要启用/禁用文档保护,请使用ProtectDocumentCommand / UnprotectDocumentCommand命令。系统将提示您输入密码。
如果启用了文档保护,则除了具有权限的范围外,文档中的任何内容都不可编辑。具有通过RangePermission.UserName或RangePermission.Group属性指定的标识的用户可以修改它们。对于可编辑的特定范围,AuthenticationOptions.UserName应等于RangePermission.UserName值或AuthenticationOptions.Group应等于RangePermission.Group值。一个特殊情况是“Everyone”组 - 无论通过身份验证选项指定的用户名或组,都可以编辑标有此组的范围。
RangePermission是一种特殊类型的书签,用于控制哪些用户可以编辑文档的特定区域。
答案 3 :(得分:0)
我对此问题的解决方案:使用IRichEditOle将文本作为图像插入。通过这种方式,文本被视为单个字符,这正是我想要的。 http://www.codeproject.com/KB/edit/MyExtRichTextBox.aspx解释了如何使用IRichEditOle。