C# 自定义文本框组件/元素(非控件)

C# 自定义文本框组件/元素(非控件),c#,winforms,text,components,gdi+,C#,Winforms,Text,Components,Gdi+,我需要一个类,它模仿TextBox控件,但不是控件,而是自定义绘制的组件或元素 创造一个感觉就像重新发明轮子,因为我到处都能看到它们。例如,在任何现代web浏览器中,文本框都不是控件。大多数Winforms控件,特别是ToolStrip控件(如ToolStripTextBox),都具有类似文本框的元素(但不是控件) 我认为微软不会为他们制作的每个控件重新发明轮子。但他们的代码很可能是专有的,而不是公开的 有人知道这方面的开源解决方案吗?我对GDI+绘图很有经验,但是在考虑插入位置、选择和插入文本

我需要一个类,它模仿TextBox控件,但不是控件,而是自定义绘制的组件或元素

创造一个感觉就像重新发明轮子,因为我到处都能看到它们。例如,在任何现代web浏览器中,文本框都不是控件。大多数Winforms控件,特别是ToolStrip控件(如ToolStripTextBox),都具有类似文本框的元素(但不是控件)

我认为微软不会为他们制作的每个控件重新发明轮子。但他们的代码很可能是专有的,而不是公开的

有人知道这方面的开源解决方案吗?我对GDI+绘图很有经验,但是在考虑插入位置、选择和插入文本时,文本字段不是一项琐碎的任务。
任何关于如何开始自己编写代码的提示都将得到赞赏,例如如何在给定点计算字符。我是否应该为每个可能字符的测量宽度创建一个查找表?或者循环测量以考虑格式化空间?

为什么它不能是控件?如果您使用的是Windows窗体,那么很可能您真的需要一个控件

出现此类问题的常见情况是网格编辑。与非控制文本框不同,通常情况下,网格在网格中显示简单文本,直到用户关注该网格。此时会插入一个临时的、真实的文本框进行编辑。离开该单元格将丢弃文本框,可能更改的文本现在由网格显示


我想你的情况也差不多。如果没有,请解释您的目标。

您可以在本文/项目中找到所需的代码

我的目标是在自定义绘制的文档画布中创建一个文本字段。我有不同类型的文档,它们是使用GDI+绘制的,并且支持滚动、缩放和图层。我想要使用抗锯齿字体的灵活性,我想要在拥有透明背景或使用渐变笔刷而不是纯色方面对外观进行更多控制。如何使用浮点比例因子精确缩放文本框控件?是否可以改用WPF?您可以将其作为整个应用程序的一小部分,而不是替换现有的部分。不,很遗憾,我必须将其与Winforms项目集成。WPF可以与Winforms集成,请查看ElementHost控件(与WPF用来承载Winforms控件的WindowsFormsHost相反)。这使它成为可能吗?可能吧,但我正在使用Winforms和.NET2.0。我认为ElementHost需要.NET3.0。我没有改变目标框架的选项,它保持在2.0的“兼容性”。