文本框上的DrawString

本文关键字:DrawString 文本 | 更新日期: 2023-09-27 17:47:47

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

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

我需要使用DrawString在TextBox上放置一个字符串。但是一旦我画出字符串,TextBox控件就会把它写出来。(我知道,因为我画得稍微偏离了控件的边缘,我的文本一半可见(在控件外的地方),一半不见(在控件上的地方)。)

有没有办法让TextBox不刷新,这样我就可以把文本放在那里?

注意:我已经研究过将TextBox子类化,并让它绘制我的文本。但是,TextBox类的Paint事件在CompactFramework中是不可捕捉的。如果你知道一种在没有paint事件的情况下在TextBox上绘制的方法,那么我很乐意将TextBox类子类化。

--问题结束——

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

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

如果有人知道重返大气层的不同方式,那也太棒了!

空置

文本框上的DrawString

您可以用不同的方式解决这个问题。听起来你想勾勒出他们以前的输入,所以他们必须再次输入。

我不知道CF最近取得了什么进展,但如果有RichTextBox,那么这个方法就会奏效。如果没有,您将不得不从基本控件开始编写自己的实现。

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

如果你想让他们离开预订,比如自由形式的文本,这个解决方案是行不通的。如果他们打字错误或输入了不同的字符,你不会放弃按键,而是清空当前和剩余的灰色字符,这样他们就可以在没有轮廓的情况下打字。

正如我在这个问题的封闭重复中所回答的:

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