Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686

Как можно укоротить код

24.03.2021, 18:11. Показов 3816. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Использую 12 кнопок и 12 картинок. Нажимая на кнопку запускаю код. Получил вот такой код.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click
        iRand = 1
        Trainer(iRand)
    End Sub
 
    Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click
        iRand = 2
        Trainer(iRand)
    End Sub
 
    Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click
        iRand = 3
        Trainer(iRand)
    End Sub
 
    Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
        iRand = 4
        Trainer(iRand)
    End Sub
 
    Private Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.Click
        iRand = 5
        Trainer(iRand)
    End Sub
 
    Private Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.Click
        iRand = 6
        Trainer(iRand)
    End Sub
 
    Private Sub Button23_Click(sender As Object, e As EventArgs) Handles Button23.Click
        iRand = 7
        Trainer(iRand)
    End Sub
 
    Private Sub Button24_Click(sender As Object, e As EventArgs) Handles Button24.Click
        iRand = 8
        Trainer(iRand)
    End Sub
 
    Private Sub Button25_Click(sender As Object, e As EventArgs) Handles Button25.Click
        iRand = 9
        Trainer(iRand)
    End Sub
 
    Private Sub Button26_Click(sender As Object, e As EventArgs) Handles Button26.Click
        iRand = 10
        Trainer(iRand)
    End Sub
 
    Private Sub Button27_Click(sender As Object, e As EventArgs) Handles Button27.Click
        iRand = 11
        Trainer(iRand)
    End Sub
 
    Private Sub Button28_Click(sender As Object, e As EventArgs) Handles Button28.Click
        iRand = 12
        Trainer(iRand)
    End Sub
Как можно сократить такой код? Ничего не могу придумать. Прошу помощи.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2021, 18:11
Ответы с готовыми решениями:

Как укоротить код, чтоб можно было добавлять слова для замены
Как укоротить код, чтоб можно было добавлять слова для замены? ' Удаляем , , TextBox2.Text = Replace(TextBox2.Text,...

Как можно укоротить код ?
Написал код после прочтение обучающих статей.. знаю что не все идеально .. все с начинали с ошибок ) public class Rrand { ...

Как укоротить код c if/else?
string balance = null; if (Config.Domen == "com") { balance = Regex.Match(balanceGet, "<span>\\$(.*?)</span>").Groups.Value; } ...

25
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
25.03.2021, 01:34
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

Студворк — интернет-сервис помощи студентам
vlad56, добавьте в код метода Form_Load ниже следующее:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Button17.Tag = 1
Button18.Tag = 2
Button19.Tag = 3
Button20.Tag = 4
Button21.Tag = 5
Button22.Tag = 6
Button23.Tag = 7
Button24.Tag = 8
Button25.Tag = 9
Button26.Tag = 10
Button27.Tag = 11
Button28.Tag = 12
Затем замените все Ваши обработчики (те, что в первом Вашем посте этой темы) на этот
VB.NET
1
2
3
4
5
6
7
Private Sub Button_Click(sender As Object, e As EventArgs) _
Handles Button18.Click, Button19.Click, Button20.Click, Button21.Click, Button22.Click, _
Button23.Click, Button24.Click, Button25.Click, Button26.Click, Button27.Click, Button28.Click
    Dim btn As Button = CType(sender, Button) 'ссылка на текущую кнопку
    iRand = CInt(btn.Tag) 'присвоение номера переменной iRand на основе свойства Tag текущей кнопки
    Trainer(iRand)
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
23
24
25
26
27
28
29
30
Public Class Form1
 
    Dim iRand As Integer
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Button17.Tag = 1
        Button18.Tag = 2
        Button19.Tag = 3
        Button20.Tag = 4
        Button21.Tag = 5
        Button22.Tag = 6
        Button23.Tag = 7
        Button24.Tag = 8
        Button25.Tag = 9
        Button26.Tag = 10
        Button27.Tag = 11
        Button28.Tag = 12
        ' Далее Ваш код
    End Sub
 
    Private Sub Button_Click(sender As Object, e As EventArgs) _
    Handles Button18.Click, Button19.Click, Button20.Click, Button21.Click, Button22.Click, _
    Button23.Click, Button24.Click, Button25.Click, Button26.Click, Button27.Click, Button28.Click
        Dim btn As Button = CType(sender, Button) 'ссылка на текущую кнопку
        iRand = CInt(btn.Tag) 'присвоение номера переменной iRand на основе свойства Tag текущей кнопки
        Trainer(iRand)
    End Sub
 
    'Другие методы формы
End Class

Всё, должно заработать.

Добавлено через 19 минут
Второй вариант сложный, но гибкий. vlad56, если Вы сможете разобраться в этом варианте, то можете считать, что познали ООП (объектно-ориентированное программирование).

Усложним поведение формы и сделаем iRand не глобальной переменной, а её свойством.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Public Class Form1
 
    Private _iRand As Integer
 
    Public Delegate Sub iRandEventHandler(ByVal sender As Object, ByVal e As iRandEventArgs) 'делегат события
 
    Public Event iRandChanged As iRandEventHandler 'объявление события изменения свойства iRand
 
    ''' <summary>
    ''' Свойство iRand
    ''' </summary>
    Property iRand As Integer
        Set(ByVal value As Integer)
            If _iRand <> value Then
                Dim iRandArgs As New iRandEventArgs 'новый экземпляр аргументов для события
                iRandArgs.PreviRand = _iRand
                iRandArgs.NewiRand = value
                _iRand = value
                OniRandChanged(iRandArgs) 'вызываем метод генерирующий событие iRandChanged
            End If
        End Set
        Get
            Return _iRand
        End Get
    End Property
 
    Public Overridable Sub OniRandChanged(ByVal e As iRandEventArgs)
        RaiseEvent iRandChanged(Me, e) 'генерируем событие с передачей в него необходимых аргументов
    End Sub
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        Button17.Tag = 1
        Button18.Tag = 2
        Button19.Tag = 3
        Button20.Tag = 4
        Button21.Tag = 5
        Button22.Tag = 6
        Button23.Tag = 7
        Button24.Tag = 8
        Button25.Tag = 9
        Button26.Tag = 10
        Button27.Tag = 11
        Button28.Tag = 12
        ' Далее Ваш код
    End Sub
 
    Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) _
    Handles Button18.Click, Button19.Click, Button20.Click, Button21.Click, Button22.Click, _
    Button23.Click, Button24.Click, Button25.Click, Button26.Click, Button27.Click, Button28.Click
        Dim btn As Button = CType(sender, Button) 'ссылка на текущую кнопку
        iRand = CInt(btn.Tag) 'присвоение свойству iRand значения на основе свойства Tag текущей кнопки
    End Sub
 
    'сами создали событие, сами же его и обработаем для наглядности
    Private Sub Form1_iRandChanged(ByVal sender As Object, ByVal e As iRandEventArgs) Handles Me.iRandChanged
        MsgBox("iRand изменилось с: " & e.PreviRand.ToString & " на: " & e.NewiRand.ToString)
        Trainer(iRand) 'а можно ещё так Trainer(e.NewiRand)
    End Sub
 
    'Далее другие методы класса
 
End Class
 
''' <summary>
''' Класс аргументов для события изменения свойства iRand
''' </summary>
''' <remarks></remarks>
Public Class iRandEventArgs
    Inherits EventArgs
    Property PreviRand As Integer 'предыдущее значение
    Property NewiRand As Integer 'текущее значение
End Class
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
25.03.2021, 07:27  [ТС]
Uswer Спасибо большое за помощь. За обучение. Это очень полезно для меня. А какие плюсы получает эта программа используя тег кнопки, переводя iRand из переменной в свойство формы. Для меня это не понятно. Для моего роста знаний это очень полезно. Для улучшения работы или надёжности программы я не знаю. Если не трудно где об этих плюсах можно почитать. Нигде не могу найти ответы на свои эти вопросы. Буду очень благодарен.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
25.03.2021, 11:04
vlad56, второй пример (со свойством iRand) я привёл исключительно в образовательных целях.
Цитата Сообщение от vlad56 Посмотреть сообщение
А какие плюсы ... переводя iRand из переменной в свойство формы
Первое, это соответствие принципам ООП. Форма в проекте это тоже класс и как любой класс она может иметь свойства, методы и поля. Переменная, объявленная на уровне формы, является полем. Поля редко оставляют открытыми, т.е. доступными для изменения вне класса. Однако разработчик (Вы) сам определяет что использовать для хранения какого либо значения поле или свойство. Прим. Для Вас пока проще использовать поле, т.е. переменную.
Второе, обратите внимание, где вызывается Trainer(iRand) во втором варианте. И этот вызов запросто можно сделать из другой формы просто изменив значение iRand, а также можно отреагировать на изменение этого значения, например поменяв картинку в PictureBox на форме2, соответствующую значению iRand. То есть Вы на форме1 кликаете Button20, при этом на форме1 меняется картинка, но также автоматически меняется картинка и на форме2.
Короче плюсов много, но и код растёт. Выбор реализации всегда за Вами. Для простых проектов переменной вполне достаточно, а для проектов "с претензией" лучше применять свойства.
Как-то так.
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
25.03.2021, 11:10  [ТС]
Я так понял для защиты коммерческих проектов от хакеров.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
25.03.2021, 11:19
Нет Вы поняли абсолютно не верно. Дальше, без прочтения Вами какой нибудь книги про ООП, обсуждать бессмысленно. Форум существует в большей степени для решения частных вопросов, цель обучения здесь не преследуется, для этого есть книги, аудио- и видеоматериалы и вебинары.
2
1550 / 1527 / 325
Регистрация: 03.10.2012
Сообщений: 1,558
25.03.2021, 11:59
Цитата Сообщение от vlad56 Посмотреть сообщение
А какие плюсы получает эта программа
vlad56, вот хорошая статья для понимания того, для чего нужны классы и вообще, почему нужно следовать принципам ООП
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2021, 11:59

Можно ли как-то укоротить участок кода?
Вот участок: List&lt;string&gt; sortList = listBox1.Items.Cast&lt;string&gt;().ToList(); sortList.Sort(); foreach (string sorted in sortList) ...

Укоротить код
как бы это укоротить!? требуется повторение несколько раз... tb_0.Text = temp.ToString(); tb_1.Text =...

Укоротить код
Как это можно укоротить? byte data0 = Encoding.Unicode.GetBytes(dataDrive); byte data1 =...

Можно ли, и если можно то как перевести код SQL в код С#
КОД ПРОГРАММЫ void __fastcall TForm1::SKChange(TObject *Sender) //Выбор таблицы { Table1-&gt;Active=false; ...

Как можно переделать код так чтобы можно было воспользоваться им на с#
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru