![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
以前も同じ質問をしましたが、カテゴリーが不適当だったようですので、再度質問します。
よろしくお願いします。
VB2010のある参考書に下記のようなプログラムがありました。
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.PictureBox1.CreateGraphics()
g.DrawEllipse(Pens.Black, 0, 0, 100, 100)
End Sub
ボタンをクリックすると円が描けます。これをプログラムの起動時に実行させようと思い
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim g As Graphics = Me.PictureBox1.CreateGraphics()
g.DrawEllipse(Pens.Black, 0, 0, 100, 100)
End Sub
と、しましたが実行されません。
どうすれば良いのでしょうか?
No.1ベストアンサー
- 回答日時:
タイミングが悪いです。
Loadイベントに書き加えると
1.Form1のロード時、DrawEllipseで円を描画(内部的に描画はされるけど、画面には反映されない)
2.Form1の生成・アクティブ可で、Form1の背景、コントロール等を描画。描いた円は上書きされて消える
3.Form1の状態が画面に反映される(円は背景描画で上書きされているので出ない)
と言う処理をされるので、画面に円は出ません。
従って、2.が行われた後(例えば、Form1_ActivateやForm1_Paint等)で行わないといけません。
No.4
- 回答日時:
> VB6では出来たと思っていたので、
AutoRedraw = True の話では?
仕組み・原理は同じでしょう。
VB or PictureBox が裏で勝手にやってることが多々あるわけです。
No.3
- 回答日時:
>期待していた動作と少し異なりますが、もう少し勉強します。
Windowsには「さまざまなお約束」と「信じられない、ありえない仕様」が沢山あります。
なので「自分が期待している動作をさせる事は出来ない」のが普通です。
みんな「期待した動作と違うけど、こうするしかない」って言うのを我慢してプログラミングしているのです。
それが我慢できないのであれば、Windowsでプログラミングするのは不可能です。
因みに「起動時に一回描画して、それで済ます」のは、Windowsの仕様では不可能です。
重ねてご指導頂きありがとうございます。
VB6では出来たと思っていたので、質問させて頂きました。
今、確認したところVB6でも同じでした。勘違いしていました。
VB6からVB2010に乗り換えたばかりで、参考書も気に入ったものが無く
ネットの入門講座などを見ながら手探りでやっています。なるべく早く
参考書を買いたいと思います。
ありがとうございました。また、お世話になると思います。よろしく
お願いします。
No.2
- 回答日時:
> ボタンをクリックすると円が描けます。
この後、画面を最小化してから元に戻すとか、
他の Window を重ねてから取り除いても、
円は消えるはずです。
ユーザが意識しないだけで、Window は頻繁に
再描画されています。
つまり実行されていないのではなく、再描画され
消えているだけです。
描画の仕組みの根幹に関わる話なので、参考書にも
ちゃんと説明してあるような内容だと思いますが。
参考書をもう一回読み直すべきではないかと思います。
対策は、
【案1】描画のイベント(Paint)で再描画の必要ができたら
書き直す。
【案2】PictureBox の Image に描画すべき情報を
記録し、再描画の必要ができたら PictureBox に再描画
させる。
http://dobon.net/vb/dotnet/graphics/pictureboxim …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- Visual Basic(VBA) Excel VBAでの右クリックのポップアップメニューの非表示方法は? 1 2023/04/12 17:03
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
新規レコード行を非表示にしたい
Access(アクセス)
-
-
4
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
5
このオブジェクトに値を代入することはできません
その他(データベース)
-
6
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
7
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windowのちらつき防止
-
C++にて、塗りつぶされた円を描...
-
word
-
CS_HREDRAW|CS_VREDRAWについて
-
OneNote 2010 文字と描画がずれる
-
MFCのタイマーのつかい方を教え...
-
VB.netでのライン描画方法がわ...
-
Minecraft 統合版(PC)の描画距...
-
TextBoxに文字を書いても表示さ...
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルで作った新しいウイン...
-
フォームでPDFを表示させた...
-
Alt+P,Alt+NをPostmessageで送...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
VB6でシャットダウン、ログオフ...
-
「アイテムは収集されました」...
-
コンボボックス内の文字サイズ変更
-
エクセル VBA 「Sub Auto_Open(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MFCでOnPaintのタイミング
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
NVIDIAのシェーダーキャッシュ
-
TextBoxに文字を書いても表示さ...
-
UpdateData( FALSE); による文...
-
VB6,リストボックスの特定行の...
-
PCで「使用可能な場合はグラフ...
-
VC++プログラムをつかったBMP画...
-
VBAにGDI+を参照させる方法
-
FlexGridの一部のみ表示を更新...
-
pset関数について
-
エクセルでガンチャートを作成...
-
C言語(dxlib)のDrawboxについ...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
MFCのタイマーのつかい方を教え...
-
CStaticコントロールの静的イメ...
-
Windowのちらつき防止
-
GDI+で高速な描画
おすすめ情報