- PR -

Validatingイベントの抑止をキーボード操作でも実行させるには?

投稿者投稿内容
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2005-06-28 11:37
投票しました。
製品版に期待します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-28 12:10
お、昨日は投票できなかったのに、投票できるようになってますね。
さっそく、投票しました。

(これって、いつも皆 5 に投票しますよねw)



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-28 22:26
引用:

お、昨日は投票できなかったのに、投票できるようになってますね。

(これって、いつも皆 5 に投票しますよねw)


 MVPか、MS社員によってバグであることが確認されないと、投票できないようです。
http://lab.msdn.microsoft.com/productfeedback/help.aspx

 自分の実装しようとしている機能に関係するバグなら、「5」になると思います。何らかの関係があるから投票したり検証しようと思うのであって、まったく関係のないものを検証したり投票しようと思わないと思います。その意味で、「投票」機能は無用かな、と思いますね。
 回避策があって、その回避策がどの程度有用かを投票できるようにして、有用な回避策があればランクを下げる、とかね。
# ってのを、Feedback Centerに送る_〆(。。)メモメモ…


 元の質問をどの様に報告したか、書いてなかったですね。eXpert Connectionですが、限られたメンバーのみ参照可能なフォーラムに投稿しています。若干編集して、以下に書きます。

〜〜〜〜〜

 こんにちは、Jittaです。Windows Form上でのValidatingイベントを使うとき、希望する動作をさせられないときがあります。何か良い案がありましたら、お教えください。

再現手順:
Windows Form上に、TextBoxを2つ、Buttonを2つおきます。
タブ順序を、TextBox1→Button1→TextBox2→Button2とします。
Form、Button1のCausesValidationプロパティをFalseにします。
TextBox1.Validatingイベントハンドラを実装します。
>> If Me.TextBox1.Text.Length = 0 Then e.Cancel = True Else e.Cancel = False

この状態で実行し、TextBox1をEmptyにして、Tabキーを入力します。フォーカスを受け取るButton1のCausesValidationがFalseなので、Validatingイベントは発生せず、フォーカスが移動します。Spaceキーを入力します。キー入力ができ、ここでは実装していませんが、Button1.Clickイベントが発生します。Enterキーを入力します。TextBox1.Validatingイベントが発生し、Button1.Clickイベントは発生せず、TextBox1にフォーカスが移動します。

質問:
 Enterキー入力でも、Spaceキー入力や、マウスでのクリックのように、Validatingイベントを発生させない方法がありますでしょうか。


 また、FormのCausesValidatingをFalseにしているのですが、「×」ボタンやアイコンクリックで表示される「閉じる」から、フォームを閉じることができません。
 Validatingイベントの先頭で、ActiveControl.CausesValidationを検査すれば閉じさせることはできますが、それではFormにCausesValidationプロパティが不要な(意味がない)ことになります。また、複雑な手順ですが、検査をスルーしてしまうことがあるため、好ましくありません。

元ネタ→ http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21986&forum=7&4

〜〜〜〜〜
〜〜〜〜〜これに対し、VS2003か、VS2005かという問い合わせがありました。
〜〜〜〜〜

 失礼しました。環境を書いていませんでした。

 VisualStudio 2003 (.NET Framework 1.1 SP1) で確認しています。

補足:
> Enterキー入力でも、Spaceキー入力や、マウスでのクリックのように、
> Validatingイベントを発生させない方法がありますでしょうか。
 CausesValidationプロパティをfalseにしたボタンにフォーカスがある状態でSpaceキーを入力しても、Validatingイベントは発生しません。同じ状態でEnterキーを入力すると、Validatingイベントが発生します。
 また、フォームのAcceptButtonを、このCausesValidationプロパティをfalseにしたボタンに設定していても、EnterキーでValidatingイベントが発生します。


> また、FormのCausesValidatingをFalseにしているのですが、
> 「×」ボタンやアイコンクリックで表示される「閉じる」から、
> フォームを閉じることができません。
 元ネタの方でVS2005のことも書いていますが、この現象自体はVS2003以前です。
 VS2005では改善されていますが、まったく問題ないわけではありません。それは「MSDN Product Feedback Center」の方に送ろうと思います。

〜〜〜〜〜
〜〜〜〜〜この後、社員さんより「バグとして報告した」との返信がありました。

_________________
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2005-06-29 09:40
>MVPか、MS社員によってバグであることが確認されないと、投票できないようです。
私が確認(Can validate)しました。MVPやMS社員じゃなくても良いようですよ。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-09-14 19:52
 すみません、確認を怠っていました。

引用:

 元の質問をどの様に報告したか、書いてなかったですね。eXpert Connectionですが、限られたメンバーのみ参照可能なフォーラムに投稿しています。若干編集して、以下に書きます。


こちらのほう、未だフィードバックはありません。
私があの会議室をみられるのは(再表彰されなければ)今月いっぱいなのだが、それまでに何かあるのだろうか?


引用:

Bug Details: CausesValidation を false にした時の動作について


こちらは“仕様”だそうです(笑)だったらCasesValidation なんてプロパティ、隠せばいいのに。
回避策として、form の closing イベントを捕まえ、e.Cancel = false としてくれ、とのことです。

_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-15 09:09
引用:

Jittaさんの書き込み (2005-09-14 19:52) より:

こちらのほう、未だフィードバックはありません。
私があの会議室をみられるのは(再表彰されなければ)今月いっぱいなのだが、
それまでに何かあるのだろうか?


あり得ないとは思いますがw
もしアレだったら、来年の 6 月末までは私が見ますよ。
私も来年の 7 月以降はどうなるかわからないですがw

引用:

こちらは“仕様”だそうです(笑)
だったらCasesValidation なんてプロパティ、隠せばいいのに。


CauseValidation ですね。
System.Windows.Forms.Control から、そのままあるわけですね。


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

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