VB2005 WindowsXP
文字列を角度をつけて表示させる為に以下のプログラムを
組みました。(あるページで載せてあったそのままです)
しかし、実際に動かすと一瞬文字列が表示されるようなのですが、
すぐに消えてしまいます。
その間、フォームのサイズを変えるなどといったことはまったく
していません。移動も何もしていません。
何かこの前後で描画に関する必要な処理が抜けているのでしょうか?
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'表示する文字列
Dim s As String = "Hello"
'PictureBox1のGraphicsオブジェクトを取得
Dim g As Graphics = PictureBox1.CreateGraphics()
'座標(30, 10)に描画するため、ワールド変換を平行移動
g.TranslateTransform(30, 10)
'ワールド変換行列を45度回転する
g.RotateTransform(45.0F)
'使用するFontオブジェクトを作成
Dim fnt As New Font("Arial", 20)
'文字列を(0, 0)に描画
g.DrawString(s, fnt, Brushes.Black, 0, 0)
'リソースを開放する
fnt.Dispose()
g.Dispose()
End Sub
再描画処理が走ってるからでしょう。
[参考]
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200601/06010102.txt
特攻隊長まるるう様
ご回答ありがとうございます。
参考ページを閲覧させて頂きました。
まだ内容が十分に理解できていませんが、Form1_Paintイベントを
用意し、その中にForm1_Loadでの内容をコピーしたところ、フォームを
伸縮するなどすればもじは表示されます(当然ですね・・・)
再描画処理と言うのがForm1_Loadの後に動いていると言うことで、
Form1_Loadの後の何かの処理に描画する処理をいれないといけないの
でしょうか?
ピンボケな質問ならお許しください。
>Form1_Paintイベントを用意し
PictureBox1 に描画するのだから PictureBox1_Paint イベントですよね?
で、Paint イベントを利用する場合は引数の e.Graphics を
使ってください。また、この場合に限り e.Graphics は破棄
しないでください。(イベント側の処理に任せてください)
んで、誤字
>開放
解放
[VB.NET]
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
'表示する文字列
Dim s As String = "Hello"
'PictureBox1のGraphicsオブジェクトを取得
Dim g As Graphics = e.Graphics
'座標(30, 10)に描画するため、ワールド変換を平行移動
g.TranslateTransform(30, 10)
'ワールド変換行列を45度回転する
g.RotateTransform(45.0F)
'使用するFontオブジェクトを作成
Dim fnt As New Font("Arial", 20)
'文字列を(0, 0)に描画
g.DrawString(s, fnt, Brushes.Black, 0, 0)
'リソースを解放する
fnt.Dispose()
End Sub
特攻隊長まるるう様
みごとにできました。
文字がでました!
ありがとうございました。
変更点(e.graphics)について、なぜそうなのか理解しないと
いけません。
もう少し勉強します。