0

可能重复:
Compact Framework 的水印文本框

使用 Visual Studio 2008 SP1、最新的 Compact 框架和 Windows Mobile 5。

我需要使用 DrawString 将字符串放在 TextBox 上。但是,一旦我绘制了字符串,TextBox 控件就会将其写入。(我知道是因为我稍微偏离了控件的边缘,并且我的文本是一半可见(不在控件的位置)和一半消失了(在控件上的位置。)

无论如何我可以让 TextBox 不刷新,以便我可以将文本保留在那里?

注意:我已经研究了 TextBox 的子类化并让它绘制我的文本。但是,TextBox 类的 Paint 事件在 CompactFramework 中是不可捕获的。如果您知道一种无需 Paint 事件即可在 TextBox 上绘画的方法,那么我很想继承 TextBox 类。

--问题结束--

万一你想知道为什么我需要这样做,这就是我正在做的事情:我需要一个文本框,其中必须输入两次数值。我需要一些明确的线索,他们必须再次输入号码。我想在文本框上显示一个稍微变灰的文本,告诉用户重新输入。

我曾尝试使用标签、超链接标签和另一个文本框,但它们掩盖了下面的文本(其默认值必须部分可见)。

如果有人知道重新进入的不同方式提示,那也很棒!

瓦卡诺

4

2 回答 2

1

你可以用不同的方式解决这个问题。听起来您想对他们以前的输入进行轮廓化,因此他们必须再次输入。

我不知道 CF 最近取得了哪些进展,但如果有 RichTextBox,那么这种方法将起作用。如果不是,您将不得不从基本控件开始编写自己的实现。

  1. 将 RichTextBox 的文本设置为轮廓值,但将所有字符的文本颜色设为灰色。
  2. 捕获按键事件,当它们按下正确的键时,将按下的字符的文本颜色从灰色更改为黑色并丢弃该按键,并丢弃所有其他按键。

如果您想允许他们取消预订(例如自由格式文本),此解决方案将不起作用。如果他们输入错误或输入不同的字符,您不会丢弃他们输入的内容,而是不会丢弃按键,而是清除当前和剩余的灰色字符,从而允许他们在没有轮廓的情况下输入。

于 2008-10-30T22:05:10.273 回答
1

正如我在封闭的骗局中回答的那样:

你在哪里做 DrawText?在 TextBox 父级上?如果是这样,那么这将是预期的行为。为什么不创建一个自定义 TextBox 控件,该控件第一次绘制(通过覆盖 OnPaint)值,可能是浅灰色,然后第二次将其再次绘制为黑色?

于 2008-10-30T23:20:21.197 回答