【问题标题】:Custom Text Box Component / Element (Not a Control)自定义文本框组件/元素(不是控件)
【发布时间】:2012-03-29 02:36:59
【问题描述】:

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

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

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

有人知道这方面的开源解决方案吗?我对 GDI+ 绘图很有经验,但是当您考虑插入符号定位、选择和插入文本时,文本字段并不是一项简单的任务。

任何关于如何自己编写代码的指针都将不胜感激,例如如何计算给定点的字符。我应该为每个可能字符的测量宽度创建一个查找表吗?还是循环遍历 MeasureString 以考虑格式化空间?

【问题讨论】:

    标签: c# winforms text components gdi+


    【解决方案1】:

    您可以在本文/项目中找到您需要的代码。 http://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting

    【讨论】:

      【解决方案2】:

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

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

      我假设您的情况类似。如果不是,请说明您的目标。

      【讨论】:

      • 我的目标是在自定义绘制的文档画布中创建一个文本字段。我有不同类型的文档,它们使用 GDI+ 绘制并支持滚动、缩放和图层。我想要使​​用抗锯齿字体的灵活性,并且我想要在具有透明背景或使用渐变画笔而不是纯色方面对外观进行更多控制。如何使用浮点缩放因子来缩放 TextBox 控件?
      • 可以改用 WPF 吗?您可以将其作为整个应用程序的一小部分包含在内,而不是替换您所拥有的。
      • 不,很遗憾,我必须将它与 Winforms 项目集成。
      • WPF 可以与 WinForms 集成,查看 ElementHost 控件(WPF 用来承载 WinForms 控件的 WindowsFormsHost 的对面)。这样做有可能吗?
      • 可能,但我正在使用带有 .NET 2.0 的 Winforms。我认为 ElementHost 需要 .NET 3.0。我没有更改目标框架的选项,它保持在 2.0 以实现“兼容性”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多