2016-07-13 3 views
1

Вот мой код, который должен изменить цвет задней части любой из моих кнопок, но он не работает, и я не знаю, что не так:Невозможно изменить задний цвет кнопки по специальному методу

Public Sub color(ByVal backcolor As System.Drawing.Color) 
    backcolor = Drawing.Color.CadetBlue 
End Sub 

И вот как я называю это, когда была нажата кнопка. Он должен изменить задний цвет Button1, но это не так. Я делаю это правильно или я что-то упускаю?

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

ответ

1
Public Sub color(ByVal btn As Control, ByVal clr As System.Drawing.Color) 
    btn.BackColor = clr 
End Sub 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    color(Button1, Drawing.Color.CadetBlue) 
End Sub 

Или

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 

Это работает с любое управление (текстовые поля, ярлыки и т. д.)

+0

На самом деле это гораздо лучшее решение. Как вы говорите, это работает для любого контроля, и передача имени элемента управления проще! +1 –

+0

Я действительно не понимаю ваше редактирование. Если он хочет изменить один и тот же задний цвет каждый раз, когда излишне добавлять другой параметр. Я думаю, что вы должны дать свое редактирование в качестве второго варианта, тем самым сохраняя оба кода. –

+0

См. Его комментарий к другому ответу. Разве я не понял правильно? Он говорит: «Это работает, но у меня есть много кнопок для изменения с разными цветами» – BanForFun

1

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 

Per @ VisualVincent свой комментарий, вы можете использовать ByRef в вашем Суб:

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

Он может также использовать 'ByRef'. –

+0

@VisualVincent - Спасибо, я не был уверен, что будет работать на собственность. Я просто тестировал это! –

+0

@jacobDenis: И ваша точка? Его редактирование делает то, что вы хотите. –

1

Для этого можно создать метод расширения. Создать общественный модуль в следующим образом:

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 

вы можете просто позвонить следующее, чтобы установить BackColor любой кнопки:

Button1.SetBackColourToCadetBlue() 
+1

Еще лучшее решение, IMO! :) –

+0

Как я могу изменить это «btn.BackColor = Drawing.Color.CadetBlue» to telerik radbutton setting –

+0

Если вы используете стороннюю кнопку, в этой части 'aButton As Button' вам нужно изменить' Button' на 'Telerik.Button' или что-то еще, что он называется - думаю, что это может быть« RadButton » –