C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: コントロール移動時の処理実行の制御方法について


(過去ログ 92 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■54876 / inTopicNo.1)  コントロール移動時の処理実行の制御方法について
  
□投稿者/ 裕猫 (190回)-(2010/11/08(Mon) 10:47:51)

分類:[C#] 

開発環境  OS WindowsXP_SP3  言語  VisualStudio2008 C#
  テキストボックス1から3まで入力していくのにenterとTABとマウスクリックによる方法があります。
テキストボックス1に入力してから他のテキストボックス(テキストボックス2か3)に入力が変わるときメッセージボックスを出すのですが、
これだとフォーカスがテキストボックス1にあるときに、終了ボタンをクリックするとメッセージボックスが出てしまいます。

 テキストボックス1から他のテキストボックスに移動するときはenterとTABとマウスクリックのどの操作でも必ずメッセージボックスは表示したいが、
ボタンクリックが起きたときには表示したくない。こういう場合どのようにしたらよいのかわかりません。アドバイスいただけないでしょうか?
						よろしくお願いいたします。
以下のプログラムでテストしています。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 文字列変換
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = textBox1.Text.ToUpper();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            MessageBox.Show("はなれた");
        }
    }
}

引用返信 編集キー/
■54878 / inTopicNo.2)  Re[1]: コントロール移動時の処理実行の制御方法について
□投稿者/ onotchikun (1回)-(2010/11/08(Mon) 10:55:33)
LeaveではなくValidatingでメッセージボックスを出すようにし、ボタンのCausesValidationプロパティをFalseにすればいいかと思います。
ボタン内の処理でthis.Close();を呼ぶときは、呼ぶ前にFormのAutoValidateプロパティもDisableにする必要があるかな?

引用返信 編集キー/
■54879 / inTopicNo.3)  Re[1]: コントロール移動時の処理実行の制御方法について
□投稿者/ shu (156回)-(2010/11/08(Mon) 10:58:09)
No54876 (裕猫 さん) に返信

ValidatingイベントでActiveControlを判断すれば出来るかと思います。

以下VB.NETですがサンプルです。

    Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
        If Me.ActiveControl Is Button1 Then
            MessageBox.Show("Button1")
        Else
            MessageBox.Show("aaaa")
        End If
    End Sub

引用返信 編集キー/
■54884 / inTopicNo.4)  Re[1]: コントロール移動時の処理実行の制御方法について
□投稿者/ よねKEN (629回)-(2010/11/08(Mon) 12:53:29)
> テキストボックス1から3まで入力していくのにenterとTABとマウスクリックによる方法があります。
> テキストボックス1に入力してから他のテキストボックス(テキストボックス2か3)に入力が変わるときメッセージボックスを出すのですが、
> これだとフォーカスがテキストボックス1にあるときに、終了ボタンをクリックするとメッセージボックスが出てしまいます。

この仕様での解決策は他の方が提示されている通りなので特に言うことはないのですが、
別解として、フォーカス移動時の処理(エラーチェックでしょうか?)では、
メッセージボックスを使うのを止めて、ErrorProviderクラスを使うという手もありますね。

行っているのがエラーチェックなら、ErrorProviderを使うことで、
ユーザの入力作業を妨げずに済むので使い勝手もよくなります。
引用返信 編集キー/
■54886 / inTopicNo.5)  Re[2]: コントロール移動時の処理実行の制御方法について
□投稿者/ 裕猫 (191回)-(2010/11/08(Mon) 14:25:48)
No54878 (onotchikun さん shu さん) に返信
> LeaveではなくValidatingでメッセージボックスを出すようにし、ボタンのCausesValidationプロパティをFalseにすればいいかと思います。
> ボタン内の処理でthis.Close();を呼ぶときは、呼ぶ前にFormのAutoValidateプロパティもDisableにする必要があるかな?
>
ありがとうございました。この方法でうまくいきました。
引用返信 編集キー/
■54887 / inTopicNo.6)  Re[2]: コントロール移動時の処理実行の制御方法について
□投稿者/ 裕猫 (192回)-(2010/11/08(Mon) 14:29:37)
No54884 (よねKEN さん) に返信
> この仕様での解決策は他の方が提示されている通りなので特に言うことはないのですが、
> 別解として、フォーカス移動時の処理(エラーチェックでしょうか?)では、
> メッセージボックスを使うのを止めて、ErrorProviderクラスを使うという手もありますね。
>
> 行っているのがエラーチェックなら、ErrorProviderを使うことで、
> ユーザの入力作業を妨げずに済むので使い勝手もよくなります。
今回はエラーではなく特定のtexstboxからフォーカスが外れたとき検索プログラムが働くように作っていますので、入力エラーは関係ないですが、エラーを使うときも出てくると思うのでしっかり覚えておきます。いろいろありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -