- PR -

【vb.net】 GroupBoxのValidatingイベント

1
投稿者投稿内容
くぷ
会議室デビュー日: 2005/05/27
投稿数: 12
投稿日時: 2005-08-24 13:03
いつも大変お世話になっております。
フォーカス遷移について悩んでいることがありまして書き込みさせて頂きます。

現在、VB.NET(環境はVS.NET2002)によるWindowsアプリケーションの開発をしています。
しかし下記のような場合にうまく動作してくれないところがあります。

GroupBox内にTextBox1,2,3の3つが貼られていて、GroupBox外にTextBox4が1つ貼られています。
GroupBox内のTextBoxからTextBox4にフォーカスを移動するとき、
GroupBox内のTextBoxが空であるときはそのTextBoxにフォーカスを返す。
これをGroupBoxのValidatingイベントで書いていますが、
これだと、一度TextBox4にフォーカスが移ってから、
再度GroupBox内のTextBoxにフォーカスが戻るといった動作になってしまっています。
TextBox4(というより、GroupBox外のコントロール)にフォーカスが移らないように制御することは出来ないのでしょうか?
お知恵を拝借願います。
宜しくお願い致します。

以下にコーディングを記載いたします。
Private Sub GroupBox1_Validating(ByVal sender As Object, ByVal _
e As System.ComponentModel.CancelEventArgs) Handles GroupBox1.Validating

  If Me.TextBox1.Text = "" Then
    e.Cancel = True
    Me.TextBox1.Focus()
  End If

End Sub
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-24 13:39
Validating イベントである以上はフォーカスは移ってしまいます。
これは防ぎようがないです。

ProcessCmdKey で Tab キーを補足などして、
キーによる遷移は防げますが、マウスでの遷移を防ぐのは面倒です。

仕様からして、少しムリが出てきています。
GroupBox 以外のコントロールを非活性にするなどして解決すべきだと思います。

引用:

  If Me.TextBox1.Text = "" Then
    e.Cancel = True
    Me.TextBox1.Focus()
  End If


これ、Me.TextBox1.Focus() 要らないです。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
くぷ
会議室デビュー日: 2005/05/27
投稿数: 12
投稿日時: 2005-08-25 10:46
じゃんぬねっと様、回答ありがとうございます。

いろいろ試してみましたが、やはり無理っぽいため
GroupBoxのValidatingを使うのはやめることにします。

ありがとうございました。
Nihonmatsu
会議室デビュー日: 2006/03/19
投稿数: 1
投稿日時: 2006-03-19 12:37
確かにValidatingメソッドは無理ですが、
GroupBoxで、それぞれのTextBoxイベントをWithEventsで登録し、TextBoxのLostFocusイベントをハンドリングすれば、「GroupBox内のTextBoxからTextBox4にフォーカスを移動するとき、 GroupBox内のTextBoxが空であるときはそのTextBoxにフォーカスを返す。」ということが可能です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-19 12:39
引用:

Nihonmatsuさんの書き込み (2006-03-19 12:37) より:

TextBoxのLostFocusイベントをハンドリングすれば、


LostFocus イベントだとまずいので、Leave イベントを使った方が良いですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)