1

ユーザーがコントロールをクリックするか、フィールドに独自のテキストを書き込むまで、テキストボックスに特定の文字列(斜体と異なるフォント)が表示される効果を再現する最も簡単な方法は何ですか?例として、SOの右上にある「検索」ボックスを見てください。

Paintイベントを使用してみました:

    private void textEdit1_Paint(object sender, PaintEventArgs e)
    {
        if (textEdit1.Text.Length == 0 && !textEdit1.Focused)
        {
            textEdit1.Font = new Font(textEdit1.Font, FontStyle.Italic);
            textEdit1.Text = "123";

        }
        else
        {
            textEdit1.Font = new Font(textEdit1.Font, FontStyle.Regular);
            textEdit1.Text = string.Empty;
        }
    }

しかし、それは機能していません。デフォルトではテキストは表示されません。クリックすると、別のコントロールフォーカスを指定するまで、テキストを「123」とstring.emptyに設定する無限ループが発生するようです。

それで、そのアプローチは最高でさえあります、そしてもしそうなら、.Focusedの代わりに正しい2番目の条件は何ですか?

4

3 に答える 3

1

TextEdit.Properties.NullValuePromptプロパティを試してください。このプロパティは、エディターにフォーカスがなく、編集値が有効な値に設定されていない場合に、灰色で表示されるテキストを提供します。

于 2012-06-29T10:26:09.720 に答える
0

まず、ペイント イベントを使用しないでください。テキスト プロパティを変更して実行する場合は、FocusChanged イベントを使用する必要があります。ただし、最も簡単な方法は、テキスト プロパティを変更するのではなく、次のようにその上に文字列を描画することです。

private void textEdit1_Paint(object sender, PaintEventArgs e)
{
    if (textEdit1.Text.Length == 0 && !textEdit1.Focused)
    {
        Font some_font = new Font(...parameters go here...);
        Brush some_brush = Brushes.Gray; // Or whatever color you want
        PointF some_location = new PointF(5,5); // Where to write the string
        e.Graphics.WriteString("some text", some_font, some_brush, some_location);
    }
}

したがって、テキストがなく、テキスト ボックスがフォーカスされていない場合は、この文字列を描画します。WriteString 関数には多くのオーバーロードがあるため、必要なものを選択できます。

于 2012-06-28T17:22:47.193 に答える
0

Enter イベントを使用できます。Textたとえば、プロパティを「検索」に設定します。他の人が報告したようにフォントを使用してください。次に、Enter イベントをキャッチし、Textプロパティを に設定しますstring.empty

textedit1.Text = "search";
private void textEdit1_Enter(object sender, EnterEventArgs e)
{
  textedit1.text = string.empty;
}

しかし、ベストプラクティスはNullValuePrompt.

于 2012-07-10T06:47:34.010 に答える