#.net #vb.net #button #resources #drawimage
#.net #vb.net #кнопка #Ресурсы #рисованное изображение
Вопрос:
У меня есть эти три изображения, которые я нарисовал в своей форме.
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.Щелчок мышью «Обрабатывает» выдает ошибку «Переменная событий не определена». Не уверен, куда идти дальше.
Заранее спасибо!
Правка 2: После помощи от LarsTech я получил перечисление в и это:
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:
Есть ли причина, по которой вы на самом деле не используете кнопки для этого?
В любом случае, у вас, вероятно, должен быть класс для всей этой информации, какое изображение, какой прямоугольник и т.д. Этот класс button также будет содержать логику IsPushed.
Но для того, что у вас есть в настоящее время, наличие перечисления, вероятно, помогло бы:
Public Enum Difficulty
None
Easy
Medium
Hard
End 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
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 " amp; level.ToString)
End If
End Sub
Комментарии:
1. Я думаю, это именно то, что я искал! Я собираюсь немного подправить это, чтобы лучше соответствовать моему коду, и вернусь через несколько минут с результатами.
2. Хорошо, я добавил новый код в свой post, просто не уверен, как вызвать его в моем цикле.
3. @user1041950 Ты не делаешь это простым. Что вы подразумеваете под циклом? WinForms использует события. Если вы нажмете на форму и будете обрабатывать событие наведения курсора мыши, будет запущен код, приведенный в моем примере. Вам не нужна отдельная переменная «GameMode», просто переместите переменную level на уровень класса.
4. Хорошо, то, что я делал раньше, заключалось в создании цикла подготовки игры к запуску, и я знаю, что, вероятно, мог бы сделать это лучше, но, вероятно, слишком поздно. Как мне заставить событие при наведении курсора мыши работать только при вызове «choosegamemode», обрабатывать событие наведения курсора мыши в этом подразделе?
5. @user1041950 «Звучит» так, будто у вас есть одна форма, пытающаяся обработать все эти разные «представления» игры. Это не самый простой способ сделать что-то в WinForms. Но да, у вас должно быть другое перечисление для GameView, для установки или воспроизведения, и вы рисуете и обрабатываете события мыши на основе того, в каком представлении вы находитесь. Близок ли я к пониманию этого?