質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

7274閲覧

フォーカスが移動したときに全選択の状態にしたい

Umeda2019

総合スコア14

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/07/07 08:48

下記の通りコードを書きました。
フォーカスは、TabやEnterで「日付」→「開始日」→「終了日」の順で移動し、「終了日」の次は「日付」に戻ります。
起動時は、「日付」が全選択となるのですが、TabやEnterで移動しても「開始日」や「終了日」は全選択となりません。
マウスで移動すると全選択となり、以降はTabやEnterで移動しても全選択状態となります。つまりマウスで一度でも全選択状態としないといけないようです。
どのように書けばTabやEnterの移動で、最初から「開始日」や「終了日」を全選択状態とできますか。
ちなみに、「日付」はTextBox、その他はMaskedTextBoxです。

Private

1 2 '操作当日の年月だけの表示とします。 3 Dim 日付 = DateTime.Now 4 Me.日付.Text = Date.Now.ToString("yyyy-MM") 5 6 '処理する月の初日をセット 7 日付 = New Date(日付.Year, 日付.Month, 1) '指定年月での最初日 8 開始日.Text = 日付 9 10 '処理する月の末日をセット 11 日付 = New Date(日付.Year, 日付.Month, 1) '指定年月での最初日 12 日付 = 日付.AddMonths(1).AddDays(-1) '次月の1日前を計算 13 終了日.Text = 日付 14 15 End Sub 16 17 'TextBoxにカーソルを移動させたときに「全選択」状態にする。(ここから始まり) 18 Private m_bFlag As Boolean = False 19 20 ' Enterイベント 21 Private Sub 開始日_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開始日.Enter 22 開始日.SelectAll() 23 If Control.MouseButtons <> Windows.Forms.MouseButtons.None Then 24 m_bFlag = True 25 End If 26 End Sub 27 28 ' MouseDownイベント 29 Private Sub 開始日_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 開始日.MouseDown 30 If m_bFlag Then 31 開始日.SelectAll() 32 m_bFlag = False 33 End If 34 End Sub 35 36 Private m_bFlag2 As Boolean = False 37 38 Private Sub 終了日_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 終了日.Enter 39 終了日.SelectAll() 40 If Control.MouseButtons <> Windows.Forms.MouseButtons.None Then 41 m_bFlag2 = True 42 End If 43 End Sub 44 45 Private Sub 終了日_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 終了日.MouseDown 46 If m_bFlag2 Then 47 終了日.SelectAll() 48 m_bFlag2 = False 49 End If 50 End Sub 51 52 Private m_bFlag3 As Boolean = False 53 54 Private Sub 日付_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 日付.Enter 55 日付.SelectAll() 56 If Control.MouseButtons <> Windows.Forms.MouseButtons.None Then 57 m_bFlag3 = True 58 End If 59 End Sub 60 61 Private Sub 日付_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 日付.MouseDown 62 If m_bFlag3 Then 63 日付.SelectAll() 64 m_bFlag3 = False 65 End If 66 End Sub 67 'TextBoxにカーソルを移動させたときに「全選択」状態にする。(ここで終わり)

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/07 09:03

何を作っているかと開発環境は書けませんか?
Umeda2019

2020/07/07 09:29

日付を限定してデータを呼び出す仕組みを作っています。今作業しているのはメニュー画面ですが、これに限らずあらゆる場面で利用したいと考えています。 開発環境は、Visual Studio 2019(VB.net)、Windows Formアプリケーションです。
guest

回答2

0

ベストアンサー

こんな感じでどうでしょう?

VB

1Public Class Form1 2 3 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 4 5 '操作当日の年月だけの表示とします。 6 Dim 日付 = DateTime.Now 7 Me.日付.Text = Date.Now.ToString("yyyy-MM") 8 9 '処理する月の初日をセット 10 日付 = New Date(日付.Year, 日付.Month, 1) '指定年月での最初日 11 開始日.Text = 日付 12 13 '処理する月の末日をセット 14 日付 = New Date(日付.Year, 日付.Month, 1) '指定年月での最初日 15 日付 = 日付.AddMonths(1).AddDays(-1) '次月の1日前を計算 16 終了日.Text = 日付 17 18 Me.KeyPreview = True 19 AddHandler Me.日付.Enter, AddressOf TextBoxes_Enter 20 AddHandler Me.開始日.Enter, AddressOf TextBoxes_Enter 21 AddHandler Me.終了日.Enter, AddressOf TextBoxes_Enter 22 End Sub 23 24 Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs) 25 MyBase.OnKeyPress(e) 26 ' Enter キーで移動する処理 27 If e.KeyChar = vbCr Then 28 ProcessTabKey((Control.ModifierKeys And Keys.Shift) = 0) 29 e.Handled = True 30 End If 31 End Sub 32 33 Private Sub TextBoxes_Enter(ByVal sender As Object, e As EventArgs) 34 BeginInvoke(Sub(ctl As Object) 35 Dim box As TextBoxBase = TryCast(ctl, TextBoxBase) 36 If box IsNot Nothing Then 37 box.SelectAll() 38 End If 39 End Sub, sender) 40 End Sub 41 42End Class

投稿2020/07/08 00:25

KOZ6.0

総合スコア2707

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOZ6.0

2020/07/08 00:36

個人的にはマウスでポイントしたときに全選択されるのは煩わしい気がします。
Umeda2019

2020/07/08 03:57

回答ありがとうございます。 見事に狙い通りの動きとなりました。 様々な場面で応用できそうです。
guest

0

マウスで移動しないと、 m_bFlag2 が Trueとならないため、EnterイベントでSelectAllが実行されません。
これをどーにかしましょう


おっと、Enterイベントではとりあえず実行してるんですね。見誤ってました

それでは、EnterイベントにはSelectAll() のみにして、全選択の動作がどうなるかをチェックしてみればどうでしょう。
そこから、マウス移動のコードを追加していき、どこでおかしくなるかを探っていけばいいかと思います

投稿2020/07/07 08:59

編集2020/07/07 09:27
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Umeda2019

2020/07/07 09:31

回答ありがとうございます。 一度試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問