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

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

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

Re[10]: VB2005での画面の更新方法


(過去ログ 83 を表示中)

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

■48808 / inTopicNo.1)  VB2005での画面の更新方法
  
□投稿者/ Miho (1回)-(2010/04/14(Wed) 19:53:28)

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

初めて投稿します。
つい最近VB2005を勉強し始めたのですが、全くの素人でどういう風に考えればいいか分からない部分があります。

作成しようとしているプログラムは、

@あるCSVファイルを、TXTファイルへコピー
Aコピーした内容を紙に印字
B作成したTXTファイルのバックアップをコピーし、プログラム終了

という単純なものです。

Form1にボタンを1つ貼り付け、そのボタンを押すと@〜Bまでの動作が一気に動くようになっています。
ここまでは、解説書などを見ながらどうにか問題なく動作するようになったのですが、困っているのはここから先です。

@、A、Bの動作をする時に、

もうひとつラベルコントロールを3つ貼り付けたForm2の画面を作成し、@、A、Bのプログラムの進行に従ってそれぞれラベル1、ラベル2、ラベル3にプログラムの進行状況をコメントとして表示させたいのですが・・・

Form2をモーダル表示させたまま、後ろで@〜Bの動作を行っている間、
例えばForm2のラベル1に、「印刷指示を開始します」のコメントをセットし、Form2をモーダル表示させます。
続いて、Aの印字に差し掛かった時点で、Form2のラベル2に「印刷中です」のコメントを自動で更新されるようにしたいのです。

色々試してみましたが、イベントの捉え方などをどのように考えたらいいのかがよく分からない為、そこで詰まりました。

Formの自動更新をするためには、タイマーを使うという方法もあるようですが、今回作成しようとしているプログラムは、それとも少し違う気がしまして。

考え方等、教えてもらえるととても助かります。
よろしくお願いします。
引用返信 編集キー/
■48809 / inTopicNo.2)  Re[1]: VB2005での画面の更新方法
□投稿者/ 魔界の仮面弁士 (1620回)-(2010/04/14(Wed) 20:19:39)
No48808 (Miho さん) に返信
> イベントの捉え方などをどのように考えたらいいのかがよく分からない為、そこで詰まりました。
Form2 を使わずに、Form1 上の Label に「印刷指示を開始します」「印刷中です」という
テキストを順に表示させることはできますか? まずはそこからだと思います。

単一フォームであれば実装できているなら、下記が参考になるかも知れません。
http://dobon.net/vb/dotnet/form/accessanotherformdata.html

> Form2をモーダル表示させたまま、
モーダルで無ければならない理由は何でしょうか? (モードレスでは駄目ですか?)

Form1 の Button1_Click から Form2 を ShowDialog で呼び出した場合、
Form1 の Button1_Click 処理は Form2 を閉じるまで続行されなくなります。
引用返信 編集キー/
■48811 / inTopicNo.3)  Re[2]: VB2005での画面の更新方法
□投稿者/ Miho (2回)-(2010/04/14(Wed) 20:55:28)
> Form2 を使わずに、Form1 上の Label に「印刷指示を開始します」「印刷中です」という
> テキストを順に表示させることはできますか? まずはそこからだと思います。

そうですね、複数フォームの使い分けがまだしっかり理解できていませんので、先にForm1の処理でテキストを順に表示できるかどうかを試してみます。

> 単一フォームであれば実装できているなら、下記が参考になるかも知れません。
> http://dobon.net/vb/dotnet/form/accessanotherformdata.html

考え方などの整理の参考にさせていただきます、ありがとうございました。


>>Form2をモーダル表示させたまま、
> モーダルで無ければならない理由は何でしょうか? (モードレスでは駄目ですか?)

Form1からForm2を呼び出した時点で、Form2は自動的にモーダル設定になるものと考えておりました。
モードレスであれば、もっと簡単に処理できるのでしょうか?


> Form1 の Button1_Click から Form2 を ShowDialog で呼び出した場合、
> Form1 の Button1_Click 処理は Form2 を閉じるまで続行されなくなります。

ここはデバッグで何度も試しましたので、理解しています。

とりあえずForm1の制御と、教えて頂いたページを参考に、再挑戦してみます。
引用返信 編集キー/
■48843 / inTopicNo.4)  Re[3]: VB2005での画面の更新方法
□投稿者/ エイジ (10回)-(2010/04/15(Thu) 12:02:03)
My.Application.DoEventsとかはどうでしょう

@ABの処理を開始して、ラベルの値を変更したタイミングで
My.Application.DoEventsを実行してら実現できないでしょうか?
引用返信 編集キー/
■48993 / inTopicNo.5)  Re[4]: VB2005での画面の更新方法
□投稿者/ Miho (3回)-(2010/04/20(Tue) 09:51:24)
> My.Application.DoEventsと魔界の仮面弁士に教えて頂いた参考ページで、自分の動かしたいように動作させることが出来ました。

ありがとうございました。
解決済み
引用返信 編集キー/
■48995 / inTopicNo.6)  Re[5]: VB2005での画面の更新方法
□投稿者/ エクシ (11回)-(2010/04/20(Tue) 10:05:53)
No48993 (Miho さん) に返信
> My.Application.DoEventsと
安易に DoEvents を勧める人がいるけど、OSが保留していた処理が実行されて
予想外の動きをして不具合を生んだ経験はないのかな?
どんな命令を自分が実行しているのか?その副作用は無いのか?
よく吟味して採用すべきだと思うよ。

コントロールの再描画のみなら、それぞれのコントロールの再描画処理
(Refresh メソッド等)が適当です。
解決済み
引用返信 編集キー/
■48999 / inTopicNo.7)  Re[6]: VB2005での画面の更新方法
□投稿者/ エイジ (11回)-(2010/04/20(Tue) 10:55:18)
2010/04/20(Tue) 10:56:03 編集(投稿者)
2010/04/20(Tue) 10:55:56 編集(投稿者)
2010/04/20(Tue) 10:55:46 編集(投稿者)

No48995 (エクシ さん) に返信
> ■No48993 (Miho さん) に返信
> > My.Application.DoEventsと
> 安易に DoEvents を勧める人がいるけど、OSが保留していた処理が実行されて
> 予想外の動きをして不具合を生んだ経験はないのかな?
> どんな命令を自分が実行しているのか?その副作用は無いのか?
> よく吟味して採用すべきだと思うよ。
>
> コントロールの再描画のみなら、それぞれのコントロールの再描画処理
> (Refresh メソッド等)が適当です。

すみません、ご指摘ありがとうございます。
今までその様な事態に陥った経験が無いのですが、OSが保留していた処理と言うのは
アプリケーション内で発生した処理の事を指すのでしょうか?
今後の勉強の為に参考になるURL等ございましたら教えていただけないでしょうか。

私は、メイン処理で時間がかかる際に進捗情報を表すプログレスバーを表示すると言う使用法をしていました。

メインフォームとは別に、プログレスバーとラベルだけの単純な進捗表示様のフォームを表示し
メインフォームの処理の進捗に合わせて、プログレスバーを進め
My.Application.DoEvents
と言う形です。
解決済み
引用返信 編集キー/
■49001 / inTopicNo.8)  Re[7]: VB2005での画面の更新方法
□投稿者/ エクシ (12回)-(2010/04/20(Tue) 11:18:38)
No48999 (エイジ さん) に返信
>今後の勉強の為に参考になるURL等ございましたら教えていただけないでしょうか。
そのくらい『DoEvents』でぐぐれば済むじゃない^^;
解決済み
引用返信 編集キー/
■49002 / inTopicNo.9)  Re[8]: VB2005での画面の更新方法
□投稿者/ みきぬ (872回)-(2010/04/20(Tue) 11:25:33)
> そのくらい『DoEvents』でぐぐれば済むじゃない^^;

追加キーワード:「再入」
解決済み
引用返信 編集キー/
■49003 / inTopicNo.10)  Re[9]: VB2005での画面の更新方法
□投稿者/ エイジ (12回)-(2010/04/20(Tue) 11:30:42)
No49002 (みきぬ さん) に返信
>>そのくらい『DoEvents』でぐぐれば済むじゃない^^;
>
> 追加キーワード:「再入」

追加キーワードありがとうございます。
簡単にMy.Application.DoEventsや、バグとかでぐぐったんですが、
使い方とかのページばっかりだったんで、安易に質問してしましました。

調べて勉強してみます!
エクシさん、みきぬさんご指摘ありがとうございます
解決済み
引用返信 編集キー/
■49005 / inTopicNo.11)  Re[10]: VB2005での画面の更新方法
□投稿者/ エクシ (13回)-(2010/04/20(Tue) 11:45:49)
2010/04/20(Tue) 11:56:08 編集(投稿者)

No49002 (みきぬ さん) に返信
> 追加キーワード:「再入」
フォローありがとう御座います。
ピンポイントでボタン連打の問題が検索されますね。

No49003 (エイジ さん) に返信
ただ、エイジさんには、この問題だけでなく、DoEvents について広く情報を
集めて頂きたいという思いもあります。
間違いや知識不足は良くあることです。それは仕方のない事です。
もともと掲示板上の情報は8割がた間違っていると思ったほうが良いくらいです。

ただ、だから色々な人から指摘が入ります。
この時点で、新しく出てきたキーワードや内容を自分で調べるのは、技術者と
しては初級レベルですよね?
質問者のレベルが低いのは百歩譲って目をつぶるとして、回答者側に立った人が
>今後の勉強の為に参考になるURL等ございましたら教えていただけないでしょうか。
これは無いと思います。

本当に分からないのなら、検索で出てきた数十万件のHitのうち、100件くらいには
目を通してください。回答者でコテハンの人の回答数は1日に数十件。だとすれば、
その数倍のページで内容を再確認しているはずです。
それと比べてみれば、大した数では無いでしょう(?)

ま、結構、手を抜いて適当なこと書いてるときもあるので、頑張り過ぎなくても
いいけどねw

追記:
> 簡単にMy.Application.DoEventsや
DoEvents はVB6.0の時代からあって、そちらの方が情報が多いから、
My.Application は余計なキーワードです。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -