【问题标题】:How to accept text input in UserControl / ScrollableControl?如何在 UserControl / ScrollableControl 中接受文本输入?
【发布时间】:2012-02-24 14:20:52
【问题描述】:

我创建了一个类似于画布的控件,用于绘制图像、形状和文本。现在只能以编程方式将文本添加到绘图表面。但我想实现一个更像所见即所得的文本输入法。所以基本的想法是在我的 ScrollableControl 实现中捕获击键。

这似乎是一项微不足道的任务 - 只需覆盖 OnKeyDown 方法,对吗?不完全 :( 这基本上意味着我必须手动处理所有可能的组合键与 SHIFT 或 ALT(对于非英文字母)。

所以问题是:有没有简单的方法可以做到这一点?请注意,不仅需要文本输入,还需要退格、回车、光标移动和所有这些东西。我觉得我遗漏了一些东西,通过OnKeyDown 手动输入处理并不是最好的解决方案。

【问题讨论】:

  • 否;这似乎是一项非常艰巨的任务。我不知道你为什么认为那是微不足道的。
  • @SLaks,通常困难的任务似乎很困难,直到你知道正确的方法:)
  • 正确的做法非常复杂,尤其是当您添加 IME、LTR 和可访问性时。
  • WPF 不是一个选项。我仅限于 .NET 2.0...但出于好奇 - WPF 如何提供帮助?
  • WPF 已经做了你想做的事——重新实现的 Windows 文本服务。 WPF 文本框可以旋转。

标签: c# winforms .net-2.0 textinput


【解决方案1】:

根据您希望文本输入的工作方式,您可以通过向控件添加无边框文本框并在用户开始输入时将其聚焦来实现。

【讨论】:

  • 不能使用可见的 TextBox。我的“画布”的内容可以缩放和旋转。我想过使用隐藏的文本框,但我不确定这是否是正确的方法。此外,不可见的文本框无法接收焦点,因此键盘输入必须以某种方式从我的控件传递到文本框。怎么样?
  • 您可以将焦点文本框置于周二屏幕之外,并根据需要镜像其文本。
  • 我已经进行了一些测试,可见“画布”之外的文本框似乎工作得很好。读取光标位置存在一些问题,但这是一件小事。但是,我会坚持接受这个答案,因为这是一个 hack,我希望有人能想出更优雅的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2013-07-20
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多