Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Rayrat89
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 70
1

Как упростить однотипный код для нескольких Button

13.08.2012, 09:22. Просмотров 1080. Ответов 11
Метки нет (Все метки)

Имеется несколько Button'ов, при клике они меняют цвет как можно проще прописать такую функцию? чтобы каждый раз вот такую туфту не прописывать?
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.ForeColor = Color.Red
        Button2.ForeColor = Color.Black
        Button3.ForeColor = Color.Black
 End sub    
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Button1.ForeColor = Color.Black
        Button2.ForeColor = Color.Red
        Button3.ForeColor = Color.Black
 End sub    
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Button1.ForeColor = Color.Black
        Button2.ForeColor = Color.Black
        Button3.ForeColor = Color.Red
 End sub
понимаю что это делается скорее всего через цикл но гугл подобных примеров не помог найти, так что прошу помощи у вас..
хотелось бы увидеть, хоть примерно ,как это будет выглядеть чтобы разобраться, или хотя бы ссылку на такую информацию
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 09:22
Ответы с готовыми решениями:

как упростить код
подскажите пожалуйста как можно уменьшить объём кода If TextBox3.Text =...

Как один массив скопировать в другой однотипный массив?
Всем здравствуйте. Есть два однородных массива. Второй не длиннее первого....

Как заблокировать Button для нажатия пользователем?
У меня на форме есть несколько клавиш. При нажатии одной из них, остальные...

Как указать параметр для свойства ControlTipText объекту Button
только не бейте, я только начал вникать в vb. делаю задание написанное для vb...

Как упростить задачу по созданию тестовых баз данных для unit test-ов ?
Подход - Code First, т.е. один класс, одна таблица. Сейчас кодю эти базы...

11
nio
5959 / 3365 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.08.2012, 09:31 2
Rayrat89, посмотри Много Buttons
и переведи на VB
0
Rayrat89
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 70
13.08.2012, 09:51  [ТС] 3
не въехал.. я с бейсиком то в сложных отношениях, а С+ вобще пока незнаком...
0
Юпатов Дмитрий
1616 / 1128 / 224
Регистрация: 23.12.2010
Сообщений: 1,495
13.08.2012, 10:36 4
vb.net
1
2
3
4
5
6
7
8
9
10
11
Private Sub Button_Click(ByVal sender As Button, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
  select case sender.name
  case = "Button1"
' код для варианта нажатия button1
  case = "Button2"
' код для варианта нажатия button2
  case = "Button3"
' код для варианта нажатия button3
  case else ' опционально
' код непредусмотренного варианта, например, ошибся с именем
 End sub
0
вадим2
92 / 92 / 3
Регистрация: 01.12.2011
Сообщений: 94
13.08.2012, 10:37 5
После перевода вот так вот получается:
vb.net
1
2
3
4
5
6
7
8
9
10
 Public Sub New()
        InitializeComponent()
        AddHandler button1.Click, AddressOf button_Click
        AddHandler button2.Click, AddressOf button_Click
        AddHandler button3.Click, AddressOf button_Click
    End Sub
 
    Private Sub button_Click(ByVal sender As Object, ByVal e As EventArgs)
 
    End Sub
А в вашем случае такой код можно так использовать:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Public Sub New()
        InitializeComponent()
        AddHandler button1.Click, AddressOf button_Click
        AddHandler button2.Click, AddressOf button_Click
        AddHandler button3.Click, AddressOf button_Click
    End Sub
 
    Private Sub button_Click(ByVal sender As Object, ByVal e As EventArgs)
        If sender.name = "Button1" Then
            Button1.ForeColor = Color.Red
            Button2.ForeColor = Color.Black
            Button3.ForeColor = Color.Black
        ElseIf sender.name = "Button2" Then
            Button1.ForeColor = Color.Black
            Button2.ForeColor = Color.Red
            Button3.ForeColor = Color.Black
        ElseIf sender.name = "Button3" Then
            Button1.ForeColor = Color.Black
            Button2.ForeColor = Color.Black
            Button3.ForeColor = Color.Red
        End If
    End Sub
0
Rayrat89
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 70
13.08.2012, 10:49  [ТС] 6
а если у меня 30 кнопок?
почти тоже самое получается..
0
вадим2
92 / 92 / 3
Регистрация: 01.12.2011
Сообщений: 94
13.08.2012, 10:58 7
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each i In Me.Controls
            If TypeOf i Is Button Then
                AddHandler (CType(i, Button)).Click, AddressOf clickbtn
            End If
        Next
    End Sub
    Sub clickbtn(ByVal sender As System.Object, ByVal e As System.EventArgs)
        For Each i In Me.Controls
            If TypeOf i Is Button Then
                CType(i, Button).ForeColor = Color.Black
            End If
        Next
        sender.ForeColor = Color.Red
    End Sub
1
Юпатов Дмитрий
1616 / 1128 / 224
Регистрация: 23.12.2010
Сообщений: 1,495
13.08.2012, 10:58 8
ну а как ты хотел? У тебя ж разный код для кнопок.
0
вадим2
92 / 92 / 3
Регистрация: 01.12.2011
Сообщений: 94
13.08.2012, 11:10 9
А можно и так, если у тебя 30 кнопок:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i1 = 1 To 30
            Try
                AddHandler Me.Controls("Button" & i1).Click, AddressOf clickbtn
            Catch ex As Exception
            End Try
        Next
    End Sub
    Sub clickbtn(ByVal sender As System.Object, ByVal e As System.EventArgs)
        For i1 = 1 To 30
            Try
                Me.Controls("Button" & i1).ForeColor = Color.Black
            Catch ex As Exception
            End Try
        Next
        sender.ForeColor = Color.Red
    End Sub
2
Rayrat89
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 70
14.08.2012, 06:27  [ТС] 10
Цитата Сообщение от вадим2 Посмотреть сообщение
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each i In Me.Controls
            If TypeOf i Is Button Then
                AddHandler (CType(i, Button)).Click, AddressOf clickbtn
            End If
        Next
    End Sub
    Sub clickbtn(ByVal sender As System.Object, ByVal e As System.EventArgs)
        For Each i In Me.Controls
            If TypeOf i Is Button Then
                CType(i, Button).ForeColor = Color.Black
            End If
        Next
        sender.ForeColor = Color.Red
    End Sub
Вадим СПС огромн все работет!!)
Щас буду разбираться каким образом работет)

Добавлено через 19 часов 16 минут
а почему не срабатывает такое событие?
Visual Basic
1
2
3
4
5
 Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        If Button1.TabIndex = ListBox1.SelectedIndex Then
            AddHandler Button1.Click, AddressOf Button1_Click
        End If
    End Sub
0
sst.djager
1 / 1 / 0
Регистрация: 17.08.2012
Сообщений: 104
21.08.2012, 16:55 11
Можно сделать вот так приведу пример:

PureBasic
1
2
3
4
5
6
7
8
9
Public Class Form1
 
    Private Sub Digit_Click(ByVal sender As System.Object,
                           ByVal e As System.EventArgs) Handles Button1.Click
 
        Button1.ForeColor = Color.Red : Button2.ForeColor = Color.Red : Button3.ForeColor = Color.Red 'пиши сколько хочешь кнопок
 
    End Sub
End Class
0
Alex Mans
9 / 9 / 2
Регистрация: 09.06.2011
Сообщений: 94
21.08.2012, 17:16 12
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Private Sub Button_Click(ByVal sender As Button, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
        Button1.ForeColor = Color.Black
        Button2.ForeColor = Color.Black
        Button3.ForeColor = Color.Black
        Select Case sender.Name
            Case Is = "Button1"
                Button1.ForeColor = Color.Red
            Case Is = "Button2"
                Button2.ForeColor = Color.Red
            Case Is = "Button3"
                Button3.ForeColor = Color.Red
            Case Else
 
        End Select
    End Sub
Тоже вариант)
0
21.08.2012, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 17:16

Упростить код работы с потоками
Как можно упростить этот код. Public Class Form1 Dim Massiv() As String...

Как упростить выражение для сравнения нескольких значений?
Например есть запись: If a = 5 or a = 10 or a = ... и т.д. Как...

Как можно упростить код для обедающих философов и добавить описание действия для каждого философа?
import java.util.Random; import java.util.concurrent.Semaphore; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru