DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[ スレッド内全5レス(親記事-5 表示) ] <<
0
>>
■34592
/ 親記事)
新たにshowしたフォームでのボタンのクリック
▼
■
□投稿者/ 未熟者ケンイチ
一般人(1回)-(2020/12/09(Wed) 14:29:09)
環境/言語:[c#]
分類:[.NET]
いつも参考にさせて頂いております。初めて投稿いたします。よろしくお願いいたします。
c#にて
Form_02 open_form = new Form_02 ();
// フォーム表示
open_form.Show (this);
// 通信処理など、長時間かかる処理
open_form.form_02_proc ();
としました。するとForm_02が表示され、表示と同時にメソッドform_02_procが呼び出されます。ここまでは意図した通りです。
Form_02にはボタンがいくつかありどのボタンも現象は同じで、最初のクリックでは反応せず、2回目のクリックでやっと処理が行われます。
現在form_02_procはテスト用のコードが書かれており、
internal void form_02_proc ()
{
Int32 loop = 0;
// お仕事シミュレーション
while ((15000 > loop) &&
(false == exit_flag))
{
Application.DoEvents ();
loop++;
textBox_test.Text = loop.ToString ();
}
// 「戻る」クリックと同じとする
p_result = RESULTS.ABORT;
exit_flag = true;
}
となっております。
上記「2度クリックしないとボタンの処理が起動しない」点について悩んでおり、諸先輩方のお力をお借りしたく投稿させていただきました。よろしくお願いいたします。
マルチポストを報告
Javascriptを有効にしてください
この投稿がマルチポスト(全く同じ内容の投稿が別の掲示板に投稿されている)の場合は、以下のフォームをご利用いただくと、報告の投稿が簡単に行えます。
このフォームに必要事項を入力後、「返信フォームに入力する」ボタンをクリックすると、このページの下にある
返信フォーム
の項目が自動的に埋まります。実際に投稿するには、その後、返信フォームの「送信」ボタンをクリックしてください。
このフォームを利用しても返信フォームが埋まるだけですので、後で書き直してから投稿することもできます。
「マルチポストされている場所」には、マルチポストされている場所のURLを入力してください。複数のURLを改行区切りで入力することができます。
マルチポストされている場所
オプション
マルチポスト先の投稿が、別人によるいたずらである可能性が高い
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34593
/ ResNo.1)
Re[1]: 新たにshowしたフォームでのボタンのクリック
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1308回)-(2020/12/10(Thu) 13:06:48)
■
No34592
に返信(未熟者ケンイチさんの記事)
> c#にて
c# ではなく、
C# ですね。
> // 通信処理など、長時間かかる処理
> open_form.form_02_proc ();
長時間かかる処理を UI スレッドで実施してはいけません。
ループ待機 + DoEvents での待ち合わせなどを行うのではなく、
C# 5.0 以上であれば async 、それ未満なら BackgroundWorker を使うなどして
時間のかかる処理を別スレッドに分離することを検討してみてください。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34596
/ ResNo.2)
Re[2]: 新たにshowしたフォームでのボタンのクリック
▲
▼
■
□投稿者/ 未熟者ケンイチ
一般人(2回)-(2020/12/10(Thu) 17:01:16)
返信いただき、ありがとうございます。
> ループ待機 + DoEvents での待ち合わせなどを行うのではなく、
> C# 5.0 以上であれば async 、それ未満なら BackgroundWorker を使うなどして
> 時間のかかる処理を別スレッドに分離することを検討してみてください。
ご指摘いただいた通り、本番のコードはそのようにする予定です。
ただ、このような方法でテスト用のコードを書き、表示と操作を行っているフォームがいくつもあるのですが、こちらで質問させていただいたもの「だけ」がこのようになるので、どこかのプロパティか、呼び出し方法の問題か、別件で色々いじったので「何かあるのかな?」と考えた次第です。
ボタンやテキストボックス等のない、フォームをクリックした後でもボタンが効きますので、どうも「1回目のクリックでフォームがアクティブ?になり、2回目のクリックでボタンクリックが認識されている」感じです。
誠に申し訳ありません。お手すきの方、もう少しお相手して頂けると幸いです。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34597
/ ResNo.3)
Re[3]: 新たにshowしたフォームでのボタンのクリック
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1309回)-(2020/12/11(Fri) 10:17:43)
■
No34596
に返信(未熟者ケンイチさんの記事)
> どうも「1回目のクリックでフォームがアクティブ?になり、
> 2回目のクリックでボタンクリックが認識されている」感じです。
そのあたりの動作は、コントロールによっても異なっており、
たとえば Button と ToolStripButton でも異なる動作となります。
具体的には、非アクティブフォームの ToolStripButton をクリックした場合、
初回はボタンが動作せず、単にフォームがアクティブ化するだけで、
2 回目のクリックで、ようやくボタンが押されることになります。
もしも一回のクリックでアクティブ化とボタン動作を同時にこなしたい場合、
該当コントロールの WndProc をオーバーライドして、
WM_MOUSEACTIVATE 時の戻り値を、MA_ACTIVATEANDEAT から
MA_ACTIVATE に差し替える必要が生じます。
https://docs.microsoft.com/ja-jp/windows/win32/inputdev/wm-mouseactivate
https://docs.microsoft.com/en-us/archive/blogs/rickbrew/how-to-enable-click-through-for-net-2-0-toolstrip-and-menustrip
あるいは、コントロールの種類が他のフォームの場合と同様であるのに
該当フォームだけ動作が異なるというのであれば、継承フォームや
NativeWindow クラスで処理されている可能性、あるいは別の UI スレッドで
動作していたために、フォーカス遷移が阻害されている箇所があったなどの
理由かもしれません。ソースを追わないと何とも言えないですが。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34599
/ ResNo.4)
Re[4]: 新たにshowしたフォームでのボタンのクリック
▲
▼
■
□投稿者/ 未熟者ケンイチ
一般人(3回)-(2020/12/14(Mon) 17:44:20)
■
No34597
に返信(魔界の仮面弁士さんの記事)
> ■
No34596
に返信(未熟者ケンイチさんの記事)
>>どうも「1回目のクリックでフォームがアクティブ?になり、
>>2回目のクリックでボタンクリックが認識されている」感じです。
>
> あるいは、コントロールの種類が他のフォームの場合と同様であるのに
> 該当フォームだけ動作が異なるというのであれば、継承フォームや
> NativeWindow クラスで処理されている可能性、あるいは別の UI スレッドで
> 動作していたために、フォーカス遷移が阻害されている箇所があったなどの
> 理由かもしれません。ソースを追わないと何とも言えないですが。
お忙しい中でのお返事、どうもありがとうございます。
せっかくお返事を頂いたのに、反応が遅くなってしまいました。申し訳ありません。
URLもご教示いただきましたが英語が苦手なため、Googleさんに聞きながら悪戦苦闘しております。
一応、ソースを貼ります。コメントは削除しましたが、その他はソースコードのままです。
・呼び出し側
Form_02 open_form = new Form_02 ();
open_form.Show (this);
open_form.form_02_proc ();
// 処理終了で結果を取得
a_result = open_form.A_RESULT;
・呼ばれる側
public Form_02 ()
{
InitializeComponent ();
}
private void Form_02_Load (object sender, EventArgs e)
{
// 表示位置調整
this.Location = new Point (0, 0);
// サイズ変更の禁止
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
// タイムアウトタイマを起動
timeout_timer = 1000;
timer_a.Enabled = true;
}
private void button_1_Click (object sender, EventArgs e)
{
a_type = A_TYPE.MEMBER;
a_machine = A_MACHINE.MACHINE01;
p_result = A_RESULTS.SUCCESS;
exit_flag = true;
}
internal void form_02_proc ()
{
Int32 loop = 0;
// お仕事シミュレーション
while (false == exit_flag)
{
Application.DoEvents ();
loop++;
textBox_test.Text = loop.ToString ();
}
}
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■34600
/ ResNo.5)
Re[4]: 新たにshowしたフォームでのボタンのクリック…自己解決
▲
▼
■
□投稿者/ 未熟者ケンイチ
一般人(5回)-(2020/12/14(Mon) 18:47:07)
自己解決いたしました。魔界の仮面弁士様、お忙しい中のご教示、どうもありがとうございました。
ソースコードは以下のように
Form_02 open_form = new Form_02 ();
this.Visible = false;
open_form.Show (this);
open_form.form_02_proc ();
と、それまで表示していたフォームを非表示にするコードを挿入するだけでした。
確かに他のフォームは、
open_form.Close ();
してからさらに別フォームを表示していたので、おそらくこの1行が効いているのだと思います。また上記「this」で指されるフォームは、アプリケーションを起動した時に表示されるフォームだったので、盲点になっておりました。
魔界の仮面弁士様はじめお読みいただいた皆様、どうもありがとうございました。
またお世話になることがあるかもしれませんが、その時はどうぞよろしくお願いいたします。
とりあえずは、これで解決といたします。
解決
済
み!
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
このスレッドをツリーで一括表示
スレッド内ページ移動 / <<
0
>>
このスレッドに書きこむ
入力内容にタグは利用できません。
引用部分(行頭に「>」や「■」が付いている部分)が全体の 80% 以上のコメントは投稿できません。
半角カナは使用しないでください。文字化けの原因になります。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例)
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
投稿前に必ずお読みください
初めて投稿される方は、必ず「
書き込みのルールについて(12/4/2更新)
」をお読みください。
読むのが面倒、ルールを守りたくないという方は、「
お気楽掲示板
」へ投稿してください。
質問を投稿する場合は、「
質問をする際のアドバイス
」を参考にしてください。
投稿は、明記のない限り、パブリックドメインになります。
マルチポストされた投稿を報告する時は匿名で投稿し、マルチポストされている場所を併記してください。以下のリンクをクリックしていただくと、自動で下のフォームが埋まりますので、その後「送信」ボタンを押してご投稿ください。
マルチポストの報告をする
マルチポストの報告をするが、マルチポスト先の投稿が嫌がらせである(元の投稿者とは別人が行なっている)可能性が高い
(投稿日時に開きがあり、こちらの投稿の方が早い場合は、その可能性が高いです)
Name
/
E-Mail
/
Title
/
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.png
/.zip
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
20KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/300KB]
残り:[300KB]
Icon
/
ホイールロボ
くるりロボ
ぱんだ
ふとめネコ
ねずみ
こあら
疑問ねこ
ランダム
管理者用
(画像を選択/
サンプル一覧
)
削除キー
/
(半角8文字以内)
解決
済
み!
BOX/
解決したらチェックしてください!(スレッドを閉じる目的ではチェックしないでください!)
クリエイティブ・コモンズ・ライセンス
を Comment の末尾に挿入するには、以下のリンクをクリックしてください。(Javascript で挿入しているだけです。)
表示(CC BY)
|
表示-改変禁止(CC BY-ND)
|
表示-継承(CC BY-SA)
|
表示-非営利(CC BY-NC)
|
表示-非営利-改変禁止(CC BY-NC-ND)
|
表示-非営利-継承(CC BY-NC-SA)
プレビュー/
クッキーに保存しない/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-