- PR -

MDI子フォーム上のボタンの挙動について

1
投稿者投稿内容
Roughcut
会議室デビュー日: 2003/09/29
投稿数: 3
投稿日時: 2005-03-28 20:10
MDI形式のWindowsアプリケーションについての質問です。
環境は Win2000, VB.NET 2003 です。

[プログラムの概要]
MDI子フォーム(Form1)にはボタンとテキストボックスが1つずつあり、
ボタン押下により別のMDI子フォーム(Form2)を開きます。

[現象]
Form1のボタンを押下してForm2を開く。
Form2はそのままにして、Form1のテキストボックスをフォーカス。
テキストボックス上でEnterキー押下。
ボタンのClickイベントが走り、Form2が開く! ←問題点

[知りたいこと]
1.問題点を回避する方法
2.なぜButton1_Clickが走るのか

ご存知の方がいましたら、ご教授ください。
よろしくお願い致します。



コード:
<MDI親フォーム>
    'ロード時にMDI子フォームを開く
    Private Sub FormMDIParent_Load(ByVal sender As Object...
        Me.IsMdiContainer = True
        
        Dim frm1 as New Form1
        frm1.MdiParent = Me
        frm1.Show()
    End Sub


<MDI子フォーム(Form1)>
    'ボタン押下時にMDI子フォームを開く
    Private Sub Button1_Click(ByVal sender As System.Object...

        Dim frm2 as New Form2
        frm2.MdiParent = Me.MdiParent
        frm2.Show()

    End Sub


デザイナ上でコントロールのプロパティの変更はしてないです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-03-28 20:53
こんにちは、じゃんぬ です。

引用:

1.問題点を回避する方法



If Button1.Focused = True Then
  '/ 処理
End If

という感じにすれば防げると思います。

引用:

2.なぜButton1_Clickが走るのか



これは、わかりません... (^-^A)
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-30 07:33
> 2.なぜButton1_Clickが走るのか
 フォームのデフォルトボタンに指定されているとか。AcceptButtonプロパティが設定されていないか、確認してみてください。
# 似たものに、CancelButtonというのがあります。

 なお、Form2を1つしか開きたくない、というのなら、シングルトンパターンを実装するか、フラグで制御します。

_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-03-30 09:21
こんにちは、じゃんぬ です。

引用:

フォームのデフォルトボタンに指定されているとか。AcceptButtonプロパティが設定されていないか、確認してみてください。
# 似たものに、CancelButtonというのがあります。



それが、そうでもないみたいです... (^-^;)
こちらでも、確認しました...
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-03-30 09:32
私も確認しました。
いまだに解りません。

_________________
たつごろー
codeseek
こみゅぷらす
Roughcut
会議室デビュー日: 2003/09/29
投稿数: 3
投稿日時: 2005-03-30 12:01
Roughcutです。
皆様、返信ありがとうございます。

>じゃんぬさん
回避策の提案、ありがとうございます。
ControlクラスにFocusedプロパティってのがあるんですね。知らなかったです。
とりあえず、このやり方で回避したいと思います。

>Jittaさん
AcceptButtonプロパティですが、設定されていないことを確認しました。
明示的にNothingを入れたりしたのですが、現象は発生するようです。

MDI子フォームでなければこの現象は発生しないんですけどねぇ・・・
なんでじゃー!

この問題ばかり調査できる状況ではないのですが、
時間を見つけて引き続き調査したいと思います。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2005-04-03 19:42
MDI親ウィンドウのフォームで以下のメソッドをオーバーライドしてください。

protected override bool ProcessDialogKey(Keys keyData)
{
 return true ;
}

_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
1

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