- PR -

テキストボックスでエンターを押下するとクリックイベントが発生する

投稿者投稿内容
sora
会議室デビュー日: 2004/10/16
投稿数: 17
投稿日時: 2004-10-16 21:37
WindowsアプリをC#で開発しています。

現在、件名の現象でこまっています。

Form1とForm2がありForm1にはForm2を表示するボタンとテキストボックスがあり
Form2にはForm1にもどるボタンがあります。
Form1からForm2を表示しForm2からForm1にもどってマウスでテキストボックスに
フォーカスを移しエンターキーを押下するとなぜかクリックイベントが
発生し、Form2が表示されてしまいます。

これはなぜでしょうか?

解決できなく投稿させていただきました。
よろしくおねがいします

べっかめ
会議室デビュー日: 2004/06/05
投稿数: 7
お住まい・勤務地: 大分県
投稿日時: 2004-10-16 23:46
Form1のAcceptButtonが設定されていませんか?
これが設定されるとEnterキーを押すたびに、ボタンがクリックされます。
sora
会議室デビュー日: 2004/10/16
投稿数: 17
投稿日時: 2004-10-17 16:10
べっかめさん返信ありがとうございます。

フォームのAcceptButtonの設定な「なし」
になっています。

特にフォームのプロパティはいじっていないのですが・・・
なにがいけないんだろう?

まだ、解決できません

よろしくお願いします


nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-17 16:36
引用:

soraさんの書き込み (2004-10-16 21:37) より:
WindowsアプリをC#で開発しています。

Form1とForm2がありForm1にはForm2を表示するボタンとテキストボックスがあり
Form2にはForm1にもどるボタンがあります。
Form1からForm2を表示しForm2からForm1にもどってマウスでテキストボックスに
フォーカスを移しエンターキーを押下するとなぜかクリックイベントが
発生し、Form2が表示されてしまいます。




再現させたいのですが、、、
Form1にもどるボタンってなに?

とりあえず、
Form1からForm2を表示するコードと
Form2からForm1に戻るコードないですか。
あと、Form1のテキストボックスにイベントハンドラが
設定してあればそれも。

#投稿したあとに気づきましたが、GDNにもポストしてません?
#とりあえず、そちらをみて再現できました。


[ メッセージ編集済み 編集者: nanbu 編集日時 2004-10-17 17:18 ]
sora
会議室デビュー日: 2004/10/16
投稿数: 17
投稿日時: 2004-10-17 17:15
nanbuさん、返信ありがとうございます。

追加情報としてMDIを使用してFormの遷移をしています。
今、MDIをはずして実行するとこの現象はおきませんでした。

MDIが関係しているのでしょうか・・・

このアプリの仕様は以下のとおりです
1.親フォームのFormMainと子フォームのFrom1とForm2があります
2.Form1にはForm2を表示するボタンとテキストボックスを1つ用意します
3.Form2にはForm1を表示するボタンを用意します
4.各フォームのボタンをおすと重複してフォームができてしますので
From1とForm2はSingletonにしています
5.ボタンの処理はまとめてFormMain内で処理しています
ですので、ボタンはPublicに設定しています

上記の仕様のコードは以下のとおりです
1.Form1からForm2を表示するコード
コード:
 
// Form1表示処理
private void ToForm1_Click(object sender, System.EventArgs e)
{
	if (frm1==null)
	{
		frm1 = Form1.getInstance(); 
		frm1.MdiParent = this;
		frm1.button1.Click += new ystem.EventHandler(ToForm2_Click);
		frm1.Closed += new EventHandler(ChildFrom1_Closed);
	}

	frm1.Show();
	if (frm2!=null) {frm2.Hide();}
}


2.Form2からForm1を表示するコード
コード:
 
// Form2表示処理
private void ToForm2_Click(object sender, System.EventArgs e)
{
	if (frm2==null)
	{
		frm2 = Form2.getInstance(); 
		frm2.MdiParent = this;
		frm2.button1.Click += new System.EventHandler(ToForm1_Click);
		frm2.Closed += new EventHandler(ChildFrom2_Closed);
	}

	frm2.Show();
	if (frm1!=null) {frm1.Hide();}
}



2.Form1のSingletonの内容
宣言部とコンストラクタ
コード:
 
private static Form1 frm1 = null; 

private Form1()
{
	InitializeComponent();

}


唯一のインスタンスを返すメソット
コード:
 
public static Form1 getInstance() 
{ 
  if (frm1 == null) 
    { 
  	frm1 = new Form1(); 
  } 
  return frm1; 
}



>あと、Form1のテキストボックスにイベントハンドラが
>設定してあればそれも
なにも設定していません。
でも、イベントがおきたかどうかの判断でメッセージボックスを設定しています

以上です。

わかりづらかったらすいません。
何度でも書き直すのでよろしくおねがいします
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-17 17:25
南部です。

if (frm1!=null) {frm1.Hide();}



if (frm1!=null) {
frm1.Hide();
frm1.ActiveControl = null;
}
としてみて下さい。



sora
会議室デビュー日: 2004/10/16
投稿数: 17
投稿日時: 2004-10-17 17:54
nanbuさん、返信ありがとうございます

frm1.ActiveControl=null;
を設定してましたがやはりテキストボックスで
クリックイベントが発生し画面が遷移してしまいました。


>#投稿したあとに気づきましたが、GDNにもポストしてません?
>#とりあえず、そちらをみて再現できました。
ばれちゃいましたね(汗)
時間があまりないので2箇所に投稿しちゃいました



nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-17 18:19
南部です。

下記コードでテキストボックスを選択後のEnterで
ボタンクリックされなくなりましたけど。
環境が違うのかな?

こちらの環境は
Window Server 2003
.NET Framework 1.1 SP1
です。

// Form2表示処理
private void ToForm2_Click(object sender, System.EventArgs e)
{
if (frm2==null)
{
frm2 = Form2.getInstance();
frm2.MdiParent = this;
frm2.button1.Click += new System.EventHandler(ToForm1_Click);
frm2.Closed += new EventHandler(ChildFrom2_Closed);
}
frm2.Show();
if (frm1!=null)
{
frm1.Hide();
frm1.ActiveControl = null; // 追加コード
}
}

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