TextBox上的DrawString

时间:2008-10-30 21:35:44

标签: c# graphics compact-framework

  

可能重复:
  Watermarked Textbox for Compact Framework

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

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

无论如何我可以让TextBox不刷新,所以我可以保留我的文字吗?

注意:我已经研究过子类化TextBox,只是让它绘制我的文本。但是,CompactBox框架中无法捕获TextBox类的Paint事件。如果你知道一种方法能够在没有Paint事件的情况下在TextBox上绘画,那么我很想继承TextBox类。

- 问题结束 -

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

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

如果有人知道重新进入的不同方式也会很棒!

Vacano

2 个答案:

答案 0 :(得分:1)

您可以以不同的方式解决此问题。听起来你想要剪切他们之前的输入,所以他们必须再次输入它。

我不知道CF最近取得了哪些进展,但如果有一个RichTextBox,那么这个方法就可以了。如果不是,则必须从基本控件开始编写自己的实现。

  1. 将RichTextBox的文本设置为轮廓值,但为所有字符设置文本颜色为灰色。
  2. 捕获按键事件,当他们按下正确的按键时,将该字符的文字颜色从灰色更改为黑色并丢弃该按键,然后丢弃所有其他按键。
  3. 如果您想要允许它们退出预订,例如自由格式文本,则此解决方案将无效。如果他们输入错误或输入不同的字符而不是丢弃他们输入的内容,你就不会丢弃按键,而是删除当前和剩余的灰色字符,从而允许他们输入没有轮廓。

答案 1 :(得分:1)

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

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