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

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

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

クリック待ちの処理について

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

■83994 / inTopicNo.1)  クリック待ちの処理について
  
□投稿者/ Kaz.T (1回)-(2017/05/06(Sat) 13:15:00)

分類:[VB.NET/VB2005 以降] 

使用言語はvb2010です。
コードというよりは手法だと思いますが、プロシージャの途中でユーザー側のクリックを待って、その結果で続きを実行していく方法がわかりません。
例えば。。。

sub Test()

i=1
j=2

PictureA表示
PictureB表示

~~~~どちらかをクリックされるのを待つ~~~~

If PictureA が押された Then k=i+j
If PictureB が押された Then k=i*j

~~~~クリック待ち~~~~

If PictureA が押された Then l=j+k
If PictureB が押された Then l=j*k

end sub
上記のような感じで、前回の結果を引き継いで処理を続行したいので、クリックイベントの処理のように別プロシージャにしたくないんですが、いい方法はありませんでしょうか。

引用返信 編集キー/
■83995 / inTopicNo.2)  Re[1]: クリック待ちの処理について
□投稿者/ Azulean (818回)-(2017/05/06(Sat) 19:18:12)
No83994 (Kaz.T さん) に返信
> コードというよりは手法だと思いますが、プロシージャの途中でユーザー側のクリックを待って、その結果で続きを実行していく方法がわかりません。
(略)
> 上記のような感じで、前回の結果を引き継いで処理を続行したいので、クリックイベントの処理のように別プロシージャにしたくないんですが、いい方法はありませんでしょうか。

Windows プログラミングとしてその方法は邪道と言えるような状態です。
Application.DoEvents でループすれば目的を達成できるかもしれませんが、クリックイベント以外のイベントもいろいろと動きますし、また Test 関数に入ってくる可能性もあるかもしれません。

きちんと関数分け、フィールド変数の作成、押されてはまずいボタンのグレーアウトなどの対策を進めていくことが正攻法でしょうか。
手間はかかるので、そのプログラムの品質をどこまで要求するか次第で、DoEvents での妥協はありかもしれませんが…。
引用返信 編集キー/
■83996 / inTopicNo.3)  Re[1]: クリック待ちの処理について
□投稿者/ shu (1014回)-(2017/05/06(Sat) 21:35:13)
No83994 (Kaz.T さん) に返信

途中の結果がどうなるのかよくわからないですが
提示された流れは

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TextBox1.Text = (CInt(TextBox1.Text) + CInt(TextBox2.Text)).ToString()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox1.Text = (CInt(TextBox1.Text) * CInt(TextBox2.Text)).ToString()
    End Sub

このコードでの動きとほぼ同じかと思いますがどうでしょう?
後は初期値とか途中結果をどこかに保存するなりするだけのことかと思います。

引用返信 編集キー/
■83997 / inTopicNo.4)  Re[2]: クリック待ちの処理について
□投稿者/ Kaz.T (2回)-(2017/05/07(Sun) 08:51:39)
No83995 (Azulean さん) に返信
返信ありがとうございます。
> Windows プログラミングとしてその方法は邪道と言えるような状態です。
やっぱりそうですよね。
> Application.DoEvents でループすれば目的を達成できるかもしれませんが、クリックイベント以外のイベントもいろいろと動きますし、また Test 関数に入ってくる可能性もあるかもしれません。
その方法で誤魔化して。。。と思っていたのですが、調べていくうちに、相当な悪手であると書かれてることが多かったので手詰まりになったって感じです。


引用返信 編集キー/
■83998 / inTopicNo.5)  Re[2]: クリック待ちの処理について
□投稿者/ Kaz.T (3回)-(2017/05/07(Sun) 09:08:04)
No83996 (shu さん) に返信
返信ありがとうございます。
> 途中の結果がどうなるのかよくわからないですが
> 提示された流れは
> (コード略)
> このコードでの動きとほぼ同じかと思いますがどうでしょう?
テキストボックスのテキストに値として保存するってことですね。
PictureBox に値保存できるところがあると嬉しいですが。tagは別に使っちゃってるので厳しいですかね。

> 後は初期値とか途中結果をどこかに保存するなりするだけのことかと思います。
結果をグローバル変数に入れて、どのプロシージャからも値が取れるようにして、クリックイベントで先に続けていく、
っていう感じですかね。

引用返信 編集キー/
■83999 / inTopicNo.6)  Re[3]: クリック待ちの処理について
□投稿者/ shu (1015回)-(2017/05/07(Sun) 09:31:29)
No83998 (Kaz.T さん) に返信
> ■No83996 (shu さん) に返信
> 返信ありがとうございます。
>>途中の結果がどうなるのかよくわからないですが
>>提示された流れは
>> (コード略)
>>このコードでの動きとほぼ同じかと思いますがどうでしょう?
> テキストボックスのテキストに値として保存するってことですね。
> PictureBox に値保存できるところがあると嬉しいですが。tagは別に使っちゃってるので厳しいですかね。
>
>>後は初期値とか途中結果をどこかに保存するなりするだけのことかと思います。
> 結果をグローバル変数に入れて、どのプロシージャからも値が取れるようにして、クリックイベントで先に続けていく、
> っていう感じですかね。
>
グローバルというのがどのスコープのことを言っているのかわかりませんが
Form内のPrivate変数で十分な気がします。FormのそとからアクセスするならPublic Propertyを設けるとよいです。

引用返信 編集キー/
■84000 / inTopicNo.7)  Re[4]: クリック待ちの処理について
□投稿者/ Kaz.T (4回)-(2017/05/07(Sun) 14:27:58)
No83999 (shu さん) に返信
> ■No83998 (Kaz.T さん) に返信
>>■No83996 (shu さん) に返信
度々の返信ありがとうございます。

> >>後は初期値とか途中結果をどこかに保存するなりするだけのことかと思います。
>>結果をグローバル変数に入れて、どのプロシージャからも値が取れるようにして、クリックイベントで先に続けていく、
>>っていう感じですかね。
> グローバルというのがどのスコープのことを言っているのかわかりませんが
> Form内のPrivate変数で十分な気がします。FormのそとからアクセスするならPublic Propertyを設けるとよいです。
単一のFormですので、クラス指定の真下(という表現であってますかね?)で変数指定すればいいってことですよね。一応、そう理解しております。

また変なこと書いてるかも知れませんが。。。
その上記の位置で指定した変数ではなく、プロシージャ内で宣言した変数を引数にしてクリックイベントの処理をするプロシージャを呼ぶ、みたいなことができればいいなぁと思ったのです。

Sub Test(いくつかの引数)
Dim i as integer
(色んな処理)
Select 状況
case 1
i=(規定値)
case 2
i=(クリックされた結果の戻値)
End Select
(iを含めた上記の処理で得られた値で続きの処理)
End Sub

こんな感じで一つにまとめられたらなぁと思ったのですが、やっぱり無理そうですね、
Select の前後で分けて、後半をクリックイベント処理にするって感じですね。


引用返信 編集キー/
■84001 / inTopicNo.8)  Re[5]: クリック待ちの処理について
□投稿者/ shu (1016回)-(2017/05/08(Mon) 07:56:24)
No84000 (Kaz.T さん) に返信

バックグラウンドワーカーを使うとか、2012以降であればasync/awaitを使うという方法もありますが
いずれにしても提示された内容に少し細工をする必要があります。
引用返信 編集キー/
■84002 / inTopicNo.9)  Re[6]: クリック待ちの処理について
□投稿者/ Kaz.T (5回)-(2017/05/08(Mon) 08:43:38)
色々とご指摘ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ