Есть ли способ использовать одну и ту же подпрограмму для нескольких кнопок в нескольких формах в vb.net? - PullRequest
0 голосов
/ 05 июня 2018

Я относительно неопытен в программировании, но уже несколько лет воспринимаю его как предмет.В этом году мой последний год в школе, а это значит, что я должен выполнить большую работу.Я выбрал игру Mastermind на VB.net, но столкнулся с проблемой, которую не научился исправлять.В основной игре мне нужно переключаться между цветами, нажимая четыре кнопки каждый раз, когда человек угадает.Я хочу повторно использовать код, потому что он не маленький, но я не знаю, как сделать это с несколькими кнопками, а точнее с несколькими формами.В данный момент подпрограмма находится в модуле с намерением, чтобы к нему можно было получить доступ, когда второй игрок выбирает код перед началом игры.Это код, который я использую для циклического перебора каждого цвета.Есть еще три, как это, чтобы сформировать четыре необходимые кнопки:

CodeSelect1()
     BackColourRed1 = True
     BackColourOrange1 = False
     BackColourYellow1 = False
     BackColourGreen1 = False
     BackColourBlue1 = False
     BackColourPurple1 = False
     If BackColourRed1 = True Then
         frm2PlayerChooseCode.btnCode1.BackgroundImage = My.Resources.Orange
         BackColourRed1 = False
         BackColourOrange1 = True
     ElseIf BackColourOrange1 = True Then
         frm2PlayerChooseCode.btnCode1.BackgroundImage = My.Resources.Yellow
         BackColourOrange1 = False
         BackColourYellow1 = True
     ElseIf BackColourYellow1 = True Then
         frm2PlayerChooseCode.btnCode1.BackgroundImage = My.Resources.Green
         BackColourYellow1 = False
         BackColourGreen1 = True
     ElseIf BackColourGreen1 = True Then
         frm2PlayerChooseCode.btnCode1.BackgroundImage = My.Resources.Blue
         BackColourGreen1 = False
         BackColourBlue1 = True
     ElseIf BackColourBlue1 = True Then
         frm2PlayerChooseCode.btnCode1.BackgroundImage = My.Resources.Purple
         BackColourBlue1 = False
         BackColourPurple1 = True
     ElseIf BackColourPurple1 = True Then
         frm2PlayerChooseCode.btnCode1.BackgroundImage = My.Resources.Red
         BackColourPurple1 = False
         BackColourRed1 = True
     End If
End Sub

Я рассмотрел потенциальное решение, которое я приведу ниже, но, насколько я могу понять, оно работает только для кода наодна форма.Я попытался сделать переменные общедоступными, но это дало мне ошибку.Я чувствую, как будто я щекочу край того, что мне нужно сделать, но я просто не могу понять:

Public Sub CodeSelect1(sender As Object, e As EventArgs) _
Handles frmEasy.btnCode1.Click, frmEasy.btnCode5.Click, btnCode9.Click, btnCode13.Click, btnCode17.Click, btnCode21.Click, btnCode25.Click, btnCode29.Click, btnCode33.Click, btnCode37.Click
    Dim myButton = DirectCast(sender, Button)

В целом, как мне адаптировать этот код (или использовать другой кодполностью), чтобы использовать в нескольких формах?Вся помощь приветствуется, и спасибо

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если вы измените свой саб на следующее, вы сможете передать кнопку в качестве параметра.Затем в каждом обработчике нажатия кнопок в каждой форме просто добавьте следующий код.

CodeSelect1(CType(sender, Button))

Вот обновленный подпункт

Friend Sub CodeSelect1(btn As Button)
    BackColourRed1 = True
    BackColourRed1 = False
    BackColourYellow1 = False
    BackColourYellow1 = False
    BackColourBlue1 = False
    BackColourPurple1 = False
    If BackColourRed1 Then
        btn.BackgroundImage = My.Resources.Orange
        BackColourRed1 = False
        BackColourOrange1 = True
    ElseIf BackColourOrange1 Then
        btn.BackgroundImage = My.Resources.Yellow
        BackColourOrange1 = False
        BackColourYellow1 = True
    ElseIf BackColourYellow1 Then
        btn.BackgroundImage = My.Resources.Green
        BackColourYellow1 = False
        BackColourGreen1 = True
    ElseIf BackColourGreen1 Then
        btn.BackgroundImage = My.Resources.Blue
        BackColourGreen1 = False
        BackColourBlue1 = True
    ElseIf BackColourBlue1 Then
        btn.BackgroundImage = My.Resources.Purple
        BackColourBlue1 = False
        BackColourPurple1 = True
    ElseIf BackColourPurple1 Then
        btn.BackgroundImage = My.Resources.Red
        BackColourPurple1 = False
        BackColourRed1 = True
    End If
End Sub
0 голосов
/ 05 июня 2018

Отправьте button1-button5 в качестве параметров вашей функции.ParamArray будет полезен.

Кстати, вместо этого IsTrue-шутка

If BackColourRed1 = True Then

вы должны использовать

If BackColourRed1 Then

И ваша жизнь будет намного проще, если вы используете какую-то переменную BackColor As Color таквам не нужно заново оживлять пяту.

...