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

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

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

Re[4]: form クローズボタンでvalidateを無効にする方法


(過去ログ 101 を表示中)

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

■60506 / inTopicNo.1)  form クローズボタンでvalidateを無効にする方法
  
□投稿者/ 裕猫 (234回)-(2011/07/06(Wed) 11:45:18)

分類:[.NET 全般] 

開発環境
OS: WindowsXP SP3
言語: VisualStudio2008 C#

formの右上にあるクローズボタンで終了するときにValidateの動作が入ってしまい、Validateの動きを止めたいのですがどのように
とめたらいいのか調べたのですがわかりません。
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
           this.AutoValidate = AutoValidate.Disable;
        }
としてもだめでした。validateの中のチェックでエラーだとエラーメッセージを出させるのですが、エラーであっても終了時には
メッセージを出したくないのでどうにかしたいのですが方法がわかりません。
        private void button1_Click(object sender, EventArgs e)
        {
            this.AutoValidate = AutoValidate.Disable;
            this.Close();
        }
で終了すればvalidateの中のチェックでエラーでも何もしないで終了できるので何か方法があると思います。が調べるとクローズボタンを
無効にする方法が多くて、知りたい方法が見つかりません。よろしくお願いいたします。

引用返信 編集キー/
■60507 / inTopicNo.2)  Re[1]: form クローズボタンでvalidateを無効にする方法
□投稿者/ CRX (1回)-(2011/07/06(Wed) 11:54:56)
No60506 (裕猫 さん) に返信

以下のサイトはVBですが、参考になりますか?

http://blog.livedoor.jp/akf0/archives/51212288.html
引用返信 編集キー/
■60510 / inTopicNo.3)  Re[1]: form クローズボタンでvalidateを無効にする方法
□投稿者/ shu (830回)-(2011/07/06(Wed) 12:39:31)
2011/07/06(Wed) 12:39:41 編集(投稿者)
No60506 (裕猫 さん) に返信

VB.NETですがこれでいけました。ウィンドウメッセージのがやはり先に判定されているようです。

    Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
        If TextBox1.Text = "1" Then
            e.Cancel = True
        End If
    End Sub

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = &H112 Then   ' WM_SYSCOMMAND = &H112
            If m.WParam.ToInt32 = &HF060 Then    'SC_CLOSE = &HF060
                TextBox1.Text = ""
            End If
        End If

        MyBase.WndProc(m)
    End Sub

引用返信 編集キー/
■60511 / inTopicNo.4)  Re[2]: form クローズボタンでvalidateを無効にする方法
□投稿者/ 裕猫 (235回)-(2011/07/06(Wed) 13:05:34)
No60507 (CRX さん) に返信
> 以下のサイトはVBですが、参考になりますか?
>
> http://blog.livedoor.jp/akf0/archives/51212288.html
返信ありがとうございます。e.Cancel = false;使ってみましたがやはりvalidateの動作は実行されてしまいました。
引用返信 編集キー/
■60512 / inTopicNo.5)  Re[2]: form クローズボタンでvalidateを無効にする方法
□投稿者/ 裕猫 (236回)-(2011/07/06(Wed) 13:13:34)
No60510 (shu さん) に返信
> 2011/07/06(Wed) 12:39:41 編集(投稿者)
> VB.NETですがこれでいけました。ウィンドウメッセージのがやはり先に判定されているようです。
>
> Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
> If TextBox1.Text = "1" Then
> e.Cancel = True
> End If
> End Sub
>
> Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
> If m.Msg = &H112 Then ' WM_SYSCOMMAND = &H112
> If m.WParam.ToInt32 = &HF060 Then 'SC_CLOSE = &HF060
> TextBox1.Text = ""
> End If
> End If
>
> MyBase.WndProc(m)
> End Sub
validateの動作が1つだけならいいのですが一番多いものでは60個近くあります。どこのvalidateから終了になるかわからないため、その一つ一つにチェック入れるとプログラムも大変です。
private void Form1_Load(object sender, EventArgs e)
{
this.button1.CausesValidation = false;
}

private void button1_Click(object sender, EventArgs e)
{
this.AutoValidate = AutoValidate.Disable;
this.Close();
}
はどこのvalidateからでもエラーを出さずに終了できるので何かそういう命令ができないか探しています。すみません。
引用返信 編集キー/
■60513 / inTopicNo.6)  Re[3]: form クローズボタンでvalidateを無効にする方法
□投稿者/ shu (831回)-(2011/07/06(Wed) 13:29:26)
No60512 (裕猫 さん) に返信

> はどこのvalidateからでもエラーを出さずに終了できるので何かそういう命令ができないか探しています。すみません。

TextBox1.Text = ""
はなんでもいいんですよ。とにかくWndProc側がValidatingより先に実行されるということ。

引用返信 編集キー/
■60518 / inTopicNo.7)  Re[4]: form クローズボタンでvalidateを無効にする方法
□投稿者/ 裕猫 (237回)-(2011/07/06(Wed) 14:38:22)
No60513 (shu さん) に返信
> TextBox1.Text = ""
> はなんでもいいんですよ。とにかくWndProc側がValidatingより先に実行されるということ。
>
すみません。なにか勘違いしてたみたいです。ただいまWndProc調べていろいろやってみています。できましたらご報告いたします。
引用返信 編集キー/
■60521 / inTopicNo.8)  Re[4]: form クローズボタンでvalidateを無効にする方法
□投稿者/ 裕猫 (238回)-(2011/07/06(Wed) 14:50:01)
No60513 (shu さん) に返信
テスト成功しました
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x112;
const int SC_CLOSE = 0xF060;

if (m.Msg == WM_SYSCOMMAND && m.WParam.ToInt32() == SC_CLOSE)
{
this.AutoValidate = AutoValidate.Disable;
}

base.WndProc(ref m);
}
を入れることにより目的の動作させることができました。ありがとうございました。protected override void WndProcの動き自体を知らなかったのでとんだ勘違いして
申し訳ありませんでした。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -