2017-09-03 43 views
1

私はvb.netを初めて使用しています。イメージにテキストを追加したいのですが、コードがまったく機能していないようです。イメージにテキストを追加する

Public Class Form1 
    Dim Graph As Graphics 
    Dim Drawbitmap As Bitmap 
    Dim Brush As New Drawing.SolidBrush(Color.Black) 
    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As EventArgs) 
     Drawbitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height) 
     Graph = Graphics.FromImage(Drawbitmap) 
     PictureBox1.Image = Drawbitmap 
     Graph.SmoothingMode = Drawing2D.SmoothingMode.HighQuality 
     Graph.DrawString(RichTextBox1.Text, RichTextBox1.Font, Brush, PictureBox1.Location) 


    End Sub 
End Class 
+0

テキスト:

PictureBox1.Image?.Dispose() 

は、以前のバージョンでは、あなたがIf文を必要とするでしょうか?フォアグラウンド上のテキストを背景にイメージがあるようなもの? –

+0

あなたはPictureBoxをリフレッシュしていません。 – jAC

答えて

1

コードには多くの問題があります。まず、PictureBoxにあるBitmapを処分していません。第二に、テキストを描画するために作成したGraphicsオブジェクトを廃棄していません。第三に、それは大きな問題ではありませんが、最初にBitmapを表示してからテキストを描画することをお勧めします。

最後に、テキストが表示されない理由は、PictureBox1.Locationを使用してテキストを描画する場所を指定しているということです。これは意味がありません。これは、PictureBoxがフォームの左上から来ていることを意味します。さらに、テキストはBitmapの左上から来ることになります。 Bitmapに実際にテキストを描画する場所を考えなければなりません。そのコードはまた、代わりに不必要にも配置されていないものを作成するのではなく、システムが提供するBrushを使用していることを

Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged 
    Dim img As New Bitmap(PictureBox1.Width, PictureBox1.Height) 

    Using g = Graphics.FromImage(img) 
     g.SmoothingMode = SmoothingMode.HighQuality 
     g.DrawString(RichTextBox1.Text, RichTextBox1.Font, Brushes.Black, New PointF(10, 10)) 
    End Using 

    'Dispose the existing image if there is one.' 
    PictureBox1.Image?.Dispose() 

    PictureBox1.Image = img 
End Sub 

注:ここでは

は、いくつかは、これらすべての問題に対処するコードをテストします。この行だけVB 2017で動作することを

注:どのように画像上

If PictureBox1.Image IsNot Nothing Then 
    PictureBox1.Image.Dispose() 
End If 
+0

感謝@jmcilhinneyは魅力のように動作します!私にそれを説明してくれてありがとう –

関連する問題