[解決済み] VB.NETで線を引く方法
質問
VB.NETで簡単な線を描こうとしています。
私のコードは以下の通りですが、このコードを実行すると、フォームだけが表示されます! 線がありません。
何がいけなかったのでしょうか?
Public Class Form1
Dim pen As System.Drawing.Graphics
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
pen = Me.CreateGraphics()
pen.DrawLine(Pens.Azure, 10, 10, 20, 20)
End Sub
End Class
解決方法は?
基本的に、あなたが間違ったことをしたのは
CreateGraphics
メソッドを使用します。
これは、ほとんど、必要ないことです。もちろん、このメソッドが壊れているわけではありません。このメソッドは書いてあるとおりのことをします:ドキュメントに書いてあるとおりに
Graphics
オブジェクトはフォームの描画面を表します。
問題は、フォームが再描画されるたびに(様々な理由で起こり得ます)、そのフォームに含まれる
Graphics
オブジェクトは基本的に
リセット
. その結果、取得したものに描き込んだものはすべて消去されます。
形とは
常に
は、最初にロードされたときに再描画されます。
CreateGraphics
決して
の中で意味を持つ。
Load
イベントハンドラーメソッド また、最小化および復元されたとき、他のウィンドウに覆われたとき、あるいはサイズが変更されたときにも再描画されることになります。
<サブ
(これらのいくつかは、オペレーティングシステム、グラフィックドライバ、フォームのプロパティに依存しますが、それは要点から外れています)
.
を使う可能性があるのは
CreateGraphics
を表示する場合です。
即時
というユーザーへのフィードバック
はいけません。
は再描画の間持続する。例えば
MouseMove
イベントにおいて、ドラッグ・アンド・ドロップのフィードバックを表示する場合。
では、どのような解決策があるのでしょうか。
描画は常に
Paint
イベントハンドラーメソッド
そうすれば、再描画の際にも持続します。
Paint
イベントが発生します。
このとき
Paint
イベントが発生すると、ハンドラには
PaintEventArgs
クラスがあり、その中には
Graphics
オブジェクトに描画することができます。
では、あなたのコードはどうなっているかというと が必要です。 のようになります。
Public Class Form1
Protected Overridable Sub OnPaint(e As PaintEventArgs)
' Call the base class
MyBase.OnPaint(e)
' Do your painting
e.Graphics.DrawLine(Pens.Azure, 10, 10, 20, 20)
End Sub
End Class
(なお、上記のコードでは
OnPaint
メソッドを処理するのではなく、対応する
Paint
イベントが発生します。これは、派生クラスでイベントを処理する際のベストプラクティスと考えられています。しかし、どちらの方法でも動作します)。
関連
-
[解決済み] ポストバックまたはコールバックの引数が無効です。 イベント検証は '<pages enableEventValidation="true"/>' を使用して有効になっています。
-
[解決済み] Marginのプロパティ順
-
[解決済み] Html.BeginForm()にCSSクラスを追加する。
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] Moq Callbackについて教えてください。
-
[解決済み] 文字列から数字を抽出する正規表現
-
[解決済み] enumを列挙するには
-
[解決済み] LINQクエリでToList()とToArray()のどちらを呼び出すのが良いですか?
-
[解決済み] Microsoft.ACE.OLEDB.12.0' プロバイダがローカルマシンに登録されていません。
-
[解決済み] HashSetとListの性能比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] データテーブルの並べ替え
-
[解決済み] SQL Server Compact EditionデータベースのLINQ to SQLで、"Row not found or changed "例外を解決するにはどうすればよいですか?
-
[解決済み] Windowsイベントログで参照される「フレームワークのバージョン」とは何ですか?
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] "SSL/TLSセキュアチャネルの信頼関係を当局と確立できませんでした "の解決方法
-
[解決済み] WCFのデバッグ時にサーバーに自動的に踏み込むことができない
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?