2011年02月03日

NumericUpDown のキャレットを消す

マップエディタを作っていて、マスの倍率を変更するためにNumericUpDown を使うことにした。キャレットがチカチカしてうっとうしいので、キャレットを消す方法を検索していろいろ試してみたが、なかなかうまくいかない。HideCaret を使う方法がいくつか出てくるけど、なぜか消えなかった。そこで、DestroyCaret を使うと消えてくれた。環境によるのだろうか。

public partial class NumericUpDownEx : NumericUpDown
{
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool DestroyCaret();

    [DefaultValue(true)]
    [Category("動作")]
    public bool CaretVisible { get; set; }

    public NumericUpDownEx()
    {
        InitializeComponent();
    }

    protected override void OnGotFocus(EventArgs e)
    {       
        if (!this.CaretVisible)
        {
            DestroyCaret();
        }
        base.OnGotFocus(e);
    }
}

ここではNumericUpDown を継承しているけど、TextBox 等でもできると思う。

posted by Takenoko at 20:21| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック