.net 无法通过自定义方法更改按钮的背景色

.net 无法通过自定义方法更改按钮的背景色,.net,vb.net,colors,subroutine,backcolor,.net,Vb.net,Colors,Subroutine,Backcolor,这是我的代码,它应该更改我的任何按钮的背景颜色,但它不起作用,我不知道出了什么问题: Public Sub color(ByVal backcolor As System.Drawing.Color) backcolor = Drawing.Color.CadetBlue End Sub 下面是我在点击按钮时如何称呼它。它应该更改按钮1的背面颜色,但不会更改。我是做对了还是遗漏了什么 Private Sub Button2_Click(sender As Object, e As Ev

这是我的代码,它应该更改我的任何按钮的背景颜色,但它不起作用,我不知道出了什么问题:

Public Sub color(ByVal backcolor As System.Drawing.Color)
    backcolor = Drawing.Color.CadetBlue
End Sub
下面是我在点击按钮时如何称呼它。它应该更改
按钮1
的背面颜色,但不会更改。我是做对了还是遗漏了什么

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    color(Button1.BackColor)
End Sub

System.Drawing.Color
是一种值类型(结构)。当您将其传递给
color
方法时,只传递一个副本,而您的方法只更改副本。您应该将Sub更改为函数,返回颜色并将其分配给按钮的
BackColor
属性:

Public Function color() As System.Drawing.Color
    Return System.Drawing.Color.CadetBlue
End Function

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Button1.BackColor = color()
End Sub
尽管该函数没有增加任何值。您可能应该直接设置颜色:

Button1.BackColor = System.Drawing.Color.CadetBlue
根据@VisualVincent的评论,您可以在Sub中使用
ByRef

Private Sub ChangeColor(ByRef c As System.Drawing.Color)
    c = Color.CadetBlue
End Sub


这适用于任何控件(文本框、标签e.t.c)

您可以创建一个扩展方法来实现这一点。创建一个公共模块,如下所示:

Public Module Module1    
    <Runtime.CompilerServices.Extension()>
    Public Sub SetBackColourToCadetBlue(aButton As Button)
    'Use the following line for Telerik Button
    'Public Sub SetBackColourToCadetBlue(aButton As Telerik.WinControls.UI.RadButton) 
        aButton.BackColor = Color.CadetBlue
    End Sub
End Module

他还可以使用
ByRef
@VisualVincent-谢谢,我不确定这是否适用于酒店。我只是在测试@雅各布·丹尼斯:你的意思是?他的编辑符合你的要求。实际上这是一个更好的解决方案。正如您所说,它适用于任何控件,只传递控件的名称更简单+1我不太理解你的编辑。如果他每次都想更改为相同的背景色,那么添加另一个参数是多余的。我认为你应该把编辑作为第二选择,这样就保留了这两个代码。参见他对另一个答案的评论。难道我不明白吗?他说:
可以,但我有很多按钮可以用不同的颜色来更改,但他也说他想“只需调用函数并输入按钮名称”。只有在使用预定义的颜色时才有可能你知道什么?无论如何,这个问题有点不清楚好的,我也要补充一下。一个更好的解决方案,IMO!:)如何将此“btn.BackColor=Drawing.Color.CadetBlue”更改为telerik radbutton设置如果您使用的是第三方按钮,在这一部分中,你需要将
按钮更改为
Telerik.Button
或其他任何名称-想想它可能是
RadButton
@mattwillko谢谢你的想法,也谢谢你这么做。我只是做了一些修改。
导入Telerik.WinControls.UI
,然后将
byval按钮作为radbutton
,它就可以工作了
Public Sub color(ByVal btn As Control)
    btn.BackColor = Drawing.Color.CadetBlue
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    color(Button1)
End Sub
Public Module Module1    
    <Runtime.CompilerServices.Extension()>
    Public Sub SetBackColourToCadetBlue(aButton As Button)
    'Use the following line for Telerik Button
    'Public Sub SetBackColourToCadetBlue(aButton As Telerik.WinControls.UI.RadButton) 
        aButton.BackColor = Color.CadetBlue
    End Sub
End Module
Button1.SetBackColourToCadetBlue()