2017-10-27 16 views
0

私はハングマンゲームを作成していますが、スクリーンに描画するためにダッシュを取得できません。VB.netグラフィックスが画面に描画されない

Public Class Form1 

Public lines() As String= IO.File.ReadAllLines("C:\Users\axfonath14\Desktop\words_alpha.txt") 
Dim thisArray As String() = lines.ToArray 
Public word As String = thisArray(CInt(Int((thisArray.Length * Rnd()) + 1))) 
Public g As Graphics = Me.CreateGraphics() 
Public dash As Image = My.Resources.dash 
Public x As Integer = 1 
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Label1.Text = word 
    For Each c As Char In word 
     x += 1 
     g.DrawImage(dash, 125 + (100 * x), 100) 
    Next 
    Label2.Text = x 
End Sub 

End Class 

このコードを実行すると、ループが実行され、ラベルが文字の量に変更されますが、何も描画されません。

答えて

3

決して、CreateGraphicsに電話しないでください。怠惰な人は、例やチュートリアルで説明しなくても、実際のアプリケーションでは決して適切ではありません。描画するコントロールのイベントハンドラのPaintイベントハンドラで常に描画を行います。あなたのケースでは、完全にそのgフィールドを取り除く形のPaintイベントハンドラに描画コードを移動し、それが提供するGraphicsオブジェクトを使用します。

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint 
    For Each c As Char In word 
     x += 1 
     e.Graphics.DrawImage(dash, 125 + (100 * x), 100) 
    Next 
End Sub 

その方法を、図面を毎回復元されますフォームが消去され、再描画されます。これは、多くの場合、Loadイベントハンドラの完了後になります。

描画する内容を変更する場合は、Paintイベントハンドラからアクセスできるフィールドに適切なデータを格納する必要があります。再描画を強制するには、Paintイベントを処理しているフォームまたはコントロールのInvalidateに電話してください。

0

フォームが初期化される前にグラフィックスコンテキストを取得しています。 InitializeComponent()メソッドが呼び出された後、初期化コードを実際のコンストラクタに移動します。

関連する問題