vb.net 中有没有办法对多个表单中的多个按钮使用相同的子程序?

Is there a way to use the same subprogram for multiple buttons across multiple forms in vb.net?

我对编程的经验相对不足,但几年来一直把它作为一门学科。今年是我在学校的最后一年,这意味着我必须承担一项重大工作。我在 VB.net 中选择了 Mastermind 游戏,但我遇到了一个我还没有学会解决的问题。在主游戏中,每次有人猜测时,我都需要通过单击四个按钮来循环显示颜色。我想重用代码,因为它不小,但我不知道如何使用多个按钮,更具体地说是多个表单。目前,该子程序在一个模块中,目的是当第二个玩家在游戏开始前选择代码时可以访问它。这是我用来循环浏览每种颜色的代码。还有另外三个像这样组成需要的四个按钮:

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,但这给了我一个错误。我觉得好像我正在触及我需要做的事情的边缘,但我就是想不通:

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)

总而言之,我如何调整此代码(或完全使用不同的代码)以跨多个表单使用? 感谢所有帮助,谢谢

将 button1-button5 作为参数发送到您的函数。 ParamArray 会很方便。

顺便说一句,而不是这个 IsTrue 笑话

If BackColourRed1 = True Then

你应该使用

If BackColourRed1 Then

如果你使用一些 BackColor As Color 变量,你的生活会更轻松,这样你就不必重新发明轮子。

如果您将 sub 更改为以下内容,您将能够将按钮作为参数传递给它。然后,在每个表单的每个按钮单击处理程序中,只需添加以下代码。

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