
以前も同じ質問をしましたが、カテゴリーが不適当だったようですので、再度質問します。
よろしくお願いします。
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も見ています
-
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
アクセスのフォームに入力する文字に制限をかけたい
Access(アクセス)
-
-
4
新規レコード行を非表示にしたい
Access(アクセス)
-
5
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
6
アクセスVBAのMe!と[ ]
Access(アクセス)
-
7
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
8
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
9
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
10
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
11
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
12
Accessのコンボボックスでリストが選択できない
Word(ワード)
-
13
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
TextBoxに文字を書いても表示さ...
-
VC++プログラムをつかったBMP画...
-
word
-
[VB.net] DataGridViewの列ヘッ...
-
C#のタブコントロールについて...
-
MFCでOnPaintのタイミング
-
塗りつぶしモード ALTERNATEと...
-
VB.netでのライン描画方法がわ...
-
MFC 6.0 VC++ で、処理が重くな...
-
重いグラフィックス処理
-
OneNote 2010 文字と描画がずれる
-
ダイアログのボタンコントロー...
-
ビットマップを表示させる(MFC)
-
UpdateData( FALSE); による文...
-
VB6,リストボックスの特定行の...
-
リストビューでのドラッグ&ド...
-
google Colabでmatplotlibの描...
-
WM_PAINT
-
(C# .Net) ToolStripのボタンの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
TextBoxに文字を書いても表示さ...
-
VB6,リストボックスの特定行の...
-
NVIDIAのシェーダーキャッシュ
-
panelのスクロール表示について
-
VC++プログラムをつかったBMP画...
-
VBAにGDI+を参照させる方法
-
google Colabでmatplotlibの描...
-
MFCでOnPaintのタイミング
-
MFCのタイマーのつかい方を教え...
-
UpdateData( FALSE); による文...
-
CStaticコントロールの静的イメ...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
win32api 画面のちらつき
-
c++ ダブルバッファリング、以...
-
CDC(LineTo)で描画した線を透過...
-
BitBltでの表示での問題です。
おすすめ情報