none
MaskedTextBox.SelectAllメソッドが意図したように機能しない RRS feed

  • 質問

  • 現在、VS2005のVBでWindowsアプリケーションを作成しています。

    フォームのデザインで、MaskedTextBoxコントロールを使用して問題があります。

    以下のような問題で悩んでいる方や、何かよいアイディアがありましたら教えてください。

    よろしくお願い致します。

    ■目的:

    MaskedTxtBoxコントロールの入力文字列をコードから選択したい。

    ■問題:

    MaskedTxtBoxコントロールの入力文字列を選択するため、SelectAllメソッドを使用しているが、文字列が選択されない。

    ■サンプルコード:

        Private Sub MaskedTextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MaskedTextBox1.Enter
            Me.MaskedTextBox1.SelectAll()
        End Sub

    2006年5月30日 7:46

回答

  • じゃんぬさん ありがとうございます。

    >GotFocus イベントなどではうまくいったりするようです。

    GotFocusイベントで試したら、意図したような実装を行うことが出来ました。

    ただGotFocusイベントは、じゃんぬさんのおっしゃる通り低水準イベントなんで、

    今回開発しているアプリケーションでは使用しないでいたのですが、いたしかたないですね。

    どうもありがとうございます。

    2006年5月31日 0:27

すべての返信

  • イヨモさん、こんにちは。

     イヨモ さんからの引用
    MaskedTxtBoxコントロールの入力文字列を選択するため、SelectAllメソッドを使用しているが、文字列が選択されない。

    GotFocus イベントなどではうまくいったりするようです。

    # 低水準のイベントである GotFocus を使用するのもいかがなものでしょうね。
    # Enter イベントで利かないのは仕様なんでしょうか...

    2006年5月30日 8:26
  • じゃんぬさん ありがとうございます。

    >GotFocus イベントなどではうまくいったりするようです。

    GotFocusイベントで試したら、意図したような実装を行うことが出来ました。

    ただGotFocusイベントは、じゃんぬさんのおっしゃる通り低水準イベントなんで、

    今回開発しているアプリケーションでは使用しないでいたのですが、いたしかたないですね。

    どうもありがとうございます。

    2006年5月31日 0:27
  • private void maskedTextBox1_Enter( object sender, EventArgs e )
    {
        this.maskedTextBox1.Focus();
        this.maskedTextBox1.SelectAll();
    }


    上記の実装で全選択状態(反転表示)になりました。
    ご参考までに…
    2007年4月16日 6:03
  • VSUG で投稿された方ですよね?
    フィードバックありがとうございます。

    明示的にフォーカスを設定するとできるのですね。
    TextBox とは動きが違うので、不具合のような気がしないまでもないです。
    2007年4月17日 1:32
  • マイクロソフトのフィードバックセンターでは、「by design」ということになっています。
    <http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=90437>

    リンク先にも書かれていますが、以下のようにする方法もあります。
    Enter の中で SetFocus するのは、私としてはなんか気持ち悪いので(^^;

    private void maskedTextBox1_Enter(object sender, EventArgs e)
    {
        BeginInvoke(
            new MethodInvokerForMaskedTextBox(MaskedTextBoxSelectAll),
            sender as MaskedTextBox);
    }

    private delegate void MethodInvokerForMaskedTextBox(MaskedTextBox pTarget);
    private void MaskedTextBoxSelectAll(MaskedTextBox pTarget)
    {
        if (pTarget != null) pTarget.SelectAll();
    }

    ~言語違った...一応VB追記~
    Private Sub MaskedTextBox1_Enter( _
            ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles MaskedTextBox1.Enter
        BeginInvoke(New MethodInvokerForMaskedTextBox( _
            AddressOf MaskedTextBoxSelectAll), _
            TryCast(sender, MaskedTextBox))
    End Sub

    Private Delegate Sub MethodInvokerForMaskedTextBox(ByVal pTarget As MaskedTextBox)
    Private Sub MaskedTextBoxSelectAll(ByVal pTarget As MaskedTextBox)
        If pTarget IsNot Nothing Then pTarget.SelectAll()
    End Sub

    2007年4月17日 3:54
  • TH01 さん、ありがとうございます。
    仕様なのですね...
    2007年4月18日 9:50