- - PR -
PictureBoxの描画中にWindowsフォームの操作をしたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-28 16:00
こんにちは.
1つのボタンと1つのPictureBoxを持つ,FormをVB.NETで作成しています. PictureBoxでは,予め座標が記されたファイルをもとに 座標に従って線描画を行います. PictureBoxに線描画を行っている最中で,ボタンをクリックし, 線描画の処理を止めるプログラムを作成したいと思っています. ですが,線描画中は,ボタンを押すことができず, 押してしまうと,「応答なし」といわれてしまいます. http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html 上のリンク先を参考にスレッドを立てることも考えてはみたのですが(下記のソース), 改善されません.何かご存知の方がいらしたら,ご教授お願いします. ----- Class Form Public Sub PlayLecture() Dim t As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf worker)) t.Start() End Sub Delegate Sub SetFocusDelegate() Sub SetFocus() //PictureBoxへの描画処理を行うクラスのメソッドをコール End Sub Sub worker() Invoke(New SetFocusDelegate(AddressOf SetFocus)) End Sub End Class | ||||
|
投稿日時: 2008-05-28 16:25
描画をどうやってるんでしょうか?
座標ファイルの読み込みを別スレッドで行い、描画データを取り込む。 そして要所々で、Form か PictureBox の Invalidate を呼び、クライアント領域を無効にする。もちろん別スレッドからなので Control.Invoke 経由で。 Paint イベントで実際の描画を描画データを元に行う。 こんな感じでどうでしょう? | ||||
|
投稿日時: 2008-05-28 17:12
囚人さん,ご返答ありがとうございます.
描画ですが,別クラスで次の手順で行っています. ・Imageを対応付けたGraphicsで,DrawLineメソッドを用いて 線を引く. ・線を引いたImageをPictureBoxのBackGroundImageに設定する. なので,FormのPaintイベントは使用していません. 座標ファイルを読み込みつつ,時間を合わせながら 描画を行いため,このような処理になっています. このような処理手順に対応できるコーディングの仕方がありましたら, 教えていただきたいです. よろしくお願いいたします. | ||||
|
投稿日時: 2008-05-28 18:09
描画のタイミングをコントロールする必要があるのなら、 タイマーを使った方が制御しやすいと思います。 | ||||
|
投稿日時: 2008-05-28 19:44
からあげさん,返信ありがとうございます.
Timerを使って描画は行う予定です. しかし,描画中にFormのボタンが押せないのです... 描画中に描画処理を停止したり,停止した個所から描画を再開させたり したいのですが,どのようにしたらよいのかわかりません. また,BackgroundWorkerも使ってみましたが, そもそもBackgroundWorker内ではコントロール処理を記述してはならないそうですし... | ||||
|
投稿日時: 2008-05-28 20:42
PictureBox に直書きしようとするからドン詰まるんです。 必要な大きさの Bitmap を用意して、BackgroundWorker ではその Bitmap に描画を行います。 描画が完了したら、Invoke で適当なメソッドを呼び出して、その Bitmap を PictureBox.Image プロパティにセットすればおkです。 | ||||
|
投稿日時: 2008-05-28 21:19
基本的に、 Windowsのウィンドウは単一スレッドでしか 操作できないように作られていますので 他の操作中にボタンを押すというのはなかなか困難です。 が、CreateGraphicsはスレッドセーフです。 これを使えばできます。 オススメしませんが。 シングルスレッドで作業を細切れにしてTimerでBitmapをPictureBoxに設定する、 というので大抵はうまく作れると思います。 | ||||
|
投稿日時: 2008-05-31 21:05
渋木さん,れいさん,返信ありがとうございます.
こちらのお礼が遅くなっていまい,申し訳ありません. お二人のご教授の通り,PictureBoxのImageプロパティを使用したところ 思いとおりの動作を行うことができました. 本当にありがとうございました. 今後とも何かあった際には、ご教授頂けると幸いです. |
1