WinForms 文本框的自定义插入符号
我正在 WinForms .Net 2.0 应用程序中开发一个类似自定义超级终端的应用程序。 我在面板中有一个多行文本框,您可以在其中与硬件设备交互。
我的客户想要一个自定义插入符,一个大小为一个字符空间的填充矩形,而不是默认的垂直线。
我知道 .Net 默认情况下不提供执行此操作的选项,但必须有一些 Windows 函数来执行此操作。
I'm developing a custom HyperTerminal like application in a WinForms .Net 2.0 application. I have a multiline TextBox in a Panel in which you can interact with a hardware device.
My customer wants to have a custom Caret, a filled rectangle the size of one character space instead of the vertical line that is by default.
I know .Net does not provide an option to do this by default, but there must some Windows function to do it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这些是 Windows 提供的 Native Caret 函数列表,您可以将它们用于您的应用程序。
参考 SharpDevelop,源代码 @ src\Libraries\ICSharpCode.TextEditor\Project\Src\Gui\Caret.cs
These are the list of Native Caret functions provided by Windows you can use them for you application.
Refer SharpDevelop, Source Code @ src\Libraries\ICSharpCode.TextEditor\Project\Src\Gui\Caret.cs
假设有一个带有文本框的表单:
Assume a form with a textbox on it:
我会使用 System.Drawing 绘制自定义光标(位图),也许使用计时器让它像另一个光标一样闪烁。
获取光标的当前位置(以像素为单位)并在该光标上绘制位图。 找到正确的位置可能很棘手,但应该是可行的。
看看这里 所有者在 winforms 中绘制的文本框。
I would use System.Drawing to draw a custom cursor (bitmap), maybe with a timer to let it blink like another cursor.
Get the current position of the Cursor in pixels and draw a bitmap over that cursor. Can be tricky to find the correct position, but should be doable.
Have a look here for Owner drawn textbox in winforms.
使用:
隐藏普通插入符并绘制自己的插入符? 未经测试,但我认为应该可以工作。
Use:
Hide the normal caret and draw your own? Not tested, but should work I think.
我不确定我是否理解问题...但下一步将帮助其他像我一样找不到答案的人。
所以你有一行文本,你需要找到插入符位置(单击键盘左或右)。 您有 TextRenderer.MeasureString() 和 TextRenderer.DrawText()。 想法很简单,我们需要 util 函数
,它计算给定文本的 SizeF。 因此,如果需要找到 Caret 位置,
而 voalia
另外,您需要通过传递 (clickeX,clickedY) 来找到
index
的位置。IDEA 可以很好地处理多行自定义文本编辑
更改
为
完整项目
I'm not sure I understand question... But next will help others who like me not found answer.
So you have one line text, you need find Caret position (click keybord LEFT or RIGHT). You have TextRenderer.MeasureString() and have TextRenderer.DrawText(). Idea simple, we need util function
and it's calculate SizeF of given text. So if need find Caret position,
and voalia
Another, you need find position of
index
by passing (clickeX,clickedY).IDEA works fine with Multiline custom text edit
Change
to
full project