Создание DrawImage кнопки в VB.net 2010 - PullRequest
1 голос
/ 14 ноября 2011

У меня есть три изображения, которые я нарисовал в своей форме.

    GraphicsBuffer.DrawImage(ButtonEasy, New Rectangle(25, 330, 100, 50), 0, 0, 100, 50, GraphicsUnit.Pixel, ImageAttributes)
    GraphicsBuffer.DrawImage(ButtonMedium, New Rectangle(150, 330, 100, 50), 0, 0, 100, 50, GraphicsUnit.Pixel, ImageAttributes)
    GraphicsBuffer.DrawImage(ButtonHard, New Rectangle(275, 330, 100, 50), 0, 0, 100, 50, GraphicsUnit.Pixel, ImageAttributes)

Но я хочу сделать логическое выражение для нажатия, чтобы они могли вызывать события для загрузки выбранного режима игры.

Должен ли я сделать это с помощью кода ресурса или есть простой способ сделать это. Моя идея кажется плохой и не синтаксически правильной.

Редактировать: я дошел до этого:

Private Sub ButtonEasy_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
 Handles ButtonEasy.MouseClick

    Dim buttonEasyRect = New Rectangle(25, 330, 100, 50)
    If buttonEasyRect.Contains(e.Location) Then

    End If

End Sub

Но не совсем уверен, куда идти. По-видимому, «ButtonEasy.Mouseclick» Handles выдает ошибку «Переменная WithEvents undefined». Не уверен, куда идти отсюда.

Заранее спасибо!

Edit2: После помощи LarsTech я получил Enum, и это:

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown
    Dim level As Difficulty = Difficulty.None
    If e.Button = MouseButtons.Left Then
    End If

    If New Rectangle(25, 330, 100, 50).Contains(e.Location) Then
        level = Difficulty.Easy
    ElseIf New Rectangle(150, 330, 100, 50).Contains(e.Location) Then       
        level = Difficulty.Medium
    ElseIf New Rectangle(275, 330, 100, 50).Contains(e.Location) Then
        level = Difficulty.Hard
    End If

    If level = Difficulty.Easy Then
        GameMode = 1
    ElseIf level = Difficulty.Medium Then
        GameMode = 2
    ElseIf level = Difficulty.Hard Then
        GameMode = 3
    End If

End Sub

Как я могу назвать это в моем цикле? В настоящее время у меня есть цикл ожидания Asynchkeypress, чтобы установить шкалу времени на 300, которая запускает игру.

1 Ответ

1 голос
/ 15 ноября 2011

Есть ли причина, по которой вы на самом деле не используете кнопки для этого?

В любом случае у вас, вероятно, должен быть класс для всей этой информации, какое изображение, какой прямоугольник и т. Д. Этот класс кнопок также будет содержать логику IsPush.

Но для того, что у вас есть в данный момент, вероятно, поможет перечисление:

Public Enum Difficulty
  None
  Easy
  Medium
  Hard
End Enum

Затем в событии MouseDown:

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown
  Dim level As Difficulty = Difficulty.None

  If e.Button = MouseButtons.Left Then
    If New Rectangle(25, 330, 100, 50).Contains(e.Location) Then
      level = Difficulty.Easy
    ElseIf New Rectangle(150, 330, 100, 50).Contains(e.Location) Then
      level = Difficulty.Medium
    ElseIf New Rectangle(275, 330, 100, 50).Contains(e.Location) Then
      level = Difficulty.Hard
    End If
  End If

  If level <> Difficulty.None Then
    MessageBox.Show("You are playing " & level.ToString)
  End If
End Sub
...