テキストボックスの上でマウスを動かすと赤い線を描画するプログラムを書きました。
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
Dim g As Graphics = sender.CreateGraphics()
g.FillEllipse(Brushes.Red, e.X, e.Y, 5, 5)
End Sub
この方法の場合、フォームが再描画されると書いたものが消えてしまいます。
再描画されても消えなくて、なおかつアプリケーションをいったん終了しても復元できる方法があれば、教えてください。
No.1ベストアンサー
- 回答日時:
やってやれないことは無いですがかなり制限が付くように思います
テキスト描画用と線描画用のBitmapを準備します
dim imgTxt, img as Bitmap
イメージの表示用にPictureBoxをフォームに追加します
重ね具合が TextBox1が下、PictureBox1が上にします
Form_Loadプロシージャに
Try
' 前回終了した時点のイメージを取得
img = Bitmap.FromFile("Draw.bmp")
catch IO.FileNotFoundException
' ファイルが無ければ新規作成
img = new Bitmap( TextBox1.Width, TextBox1.Height )
End Try
PictureBox1.Image = img
' テキスト描画用のBitmapを作成
txtImg = new Bitmap(TextBox1.Width, TextBox1.Height )
Form_Closedイベントで imgをファイルに保存
'新規に保存するためのBitmapを準備
dim tmp as new Bitmap( img.Width, img.Height )
dim g as Graphics = Graphics.FromImage( tmp )
' 保存用のイメージを描画
g.DrawImage( img, 0, 0 )
g.Dispose()
' imgと"Draw.bmp"を切り離す
img.Dispose()
' Draw.imgを削除
IO.File.Delete("Draw.bmp")
' 次回用のイメージを保存
tmp.Save( "Draw.bmp" )
テキストボックスの描画用のプロシージャを準備
Sub myDraText()
' 描画用のGraphicsオブジェクトを生成
dim g as Graphics = Graphics.FromImage( txtImg )
' 描画域の初期化
g.Clear(TextBox1.BackColor)
' 文字列描画
g.DrawString( TextBox1.Text, TextBox1.Font, new SolidBrush( TextBox1.ForeColor), 0, 0 )
g.Dispose()
' 表示用のイメージを生成
dim bmpDraw as new Bitmap( txtImg.Width, txtImg.Height )
g = Graphics.FromImage( bmpDraw )
' マウスの軌跡のイメージ描画
g.DrawImage( img, 0, 0 )
' テキストイメージの背景色を透明に設定
txtImg.MakeTransparent( TextBox1.BackColor )
' テキストイメージの描画
g.DrawImage( txtImg, 0, 0 )
g.Dispose()
' 完成したイメージをPictureBoxに設定
PictureBox1.Image = bmpDraw
End Sub
PictureBox1_MouseMoveイベントで
Dim g as Graphics = Graphics.FromImage( img )
g.FillEllipse( Brushes.Red, e.X, e.Y, 5, 5 )
g.Dispose()
myDrawText()
TextBox1_TextChangedイベントに
myDrawText()
といった具合にします
この方法の場合、本来テキストボックスに表示されるキャレット(テキストの挿入位置に現れるカーソル)が描画されません
複数行のテキストボックスの場合 スクロールに対応できません
などの制約が生じます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Excel(エクセル) エクセル VBA実行中のApplication.ScreenUpdatingについて 3 2023/07/13 21:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
円の頂点の求め方を知りたいです。
-
ビットマップに描画をしてピク...
-
Excel VBA:コントロールボタン...
-
WindowsAPIの、ウインドウの表...
-
給紙トレイをダイアログを使わ...
-
C#を用いて描画する四角形の角...
-
ボタンの更新速度について
-
BCB5:Canvas->FrameRectで描画...
-
COLORREF color の反転色
-
PictureBoxのダブルバッファリ...
-
Pythonにおける物理のシミュレ...
-
ピクチャーボックスのサイズを...
-
エクセルのレーダーチャート 0...
-
コンボボックスのテキストを消...
-
.NETのPictureBoxでウインドウ...
-
win32api複数のタイマーを同時...
-
MySQLのデータをグラフ化して表...
-
worksheetFunctionクラスのVloo...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
給紙トレイをダイアログを使わ...
-
Word 描画オブジェクトを削除...
-
VB.NETでグラフィックを描くと...
-
C#を用いて描画する四角形の角...
-
C# DrawImage 物理サイズでな...
-
ビットマップに描画をしてピク...
-
PowerPoint の VBA
-
画面に絵を出す方法
-
DrawLineで引いた線が消えてし...
-
VC++ ドラッグしながらの図の...
-
円の頂点の求め方を知りたいです。
-
MFCでのコンボボックスについて
-
画面の再描画について
-
Windows10のC#のピクチャーボッ...
-
フォームに描画して表示をスク...
-
VB PictureBoxの描画範囲
-
PictureBoxのダブルバッファリ...
-
C#で壁の当たり判定と自キャラ...
おすすめ情報