Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для DarKxXxLorD
9 / 9 / 0
Регистрация: 03.10.2011
Сообщений: 52

Упрощение кода в случае, когда кнопок много, а процедуры у них схожи

23.10.2011, 09:57. Показов 1984. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
А вот ещё задачка: имеется с десяток кнопок Button1...Button 10
Для всех нажатий код примерно одинаков. Как можно описать ОДНО событие, уменьшив код?

Этот код многократно повторяется для всех кнопок:

VB.NET
1
2
3
4
5
6
7
 Private Sub Button21_Click(sender As System.Object, e As System.EventArgs) Handles Button21.Click
        'Вставить в буфер обмена
        clp_pairs = "Pair № 11: " & Button21.Text & " vs " & Button22.Text
        PrintMessage(clp_pairs & "copy to clipboard")
        PlaySound(My.Resources.DRIP)
        My.Computer.Clipboard.SetText(clp_pairs)
    End Sub
Добавлено через 30 минут
и в дополнение: как сделать так, чтобы textBox при добавлении в него текста скроллировался вниз, к последней добавленной записи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2011, 09:57
Ответы с готовыми решениями:

Как избежать кучи копи-паста кода, когда много кнопок с одинаковыми действиями?
Добрый день! Есть форма, на ней много текст-боксов и кнопок. Рядом с каждым текст-боксом есть кнопка, которая выполняет для своего...

Когда стоит использовать класс, а когда лучше обойтись без них?
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать несколько классов? Вот, например. Программа...

Удалённые хуки. Когда для них нужно создавать *.dll, а когда необязательно?
Друзья! В туториалах Iczelion'а сказано просто: То тут то там вижу утверждения, что *.dll создавать необязательно, типа и так...

15
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.10.2011, 11:30
DarKxXxLorD, например, так:
VB.NET
1
2
3
    Private Sub DarKxXxLorD(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
        'Code
    End Sub
Обрати внимание на длинный хвост процедуры, в котором о всех кнопках сказано.

Второй способ:
VB.NET
1
2
3
4
5
6
7
8
9
    Private Sub DarKxXxLorD(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MsgBox(sender.text)
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For I As Integer = 1 To 5
            AddHandler Me.Controls("Button" & I).Click, AddressOf DarKxXxLorD
        Next
    End Sub
Автопрокрутка
VB.NET
1
2
        TextBox1.SelectionStart = TextBox1.TextLength
        TextBox1.ScrollToCaret()
2
 Аватар для DarKxXxLorD
9 / 9 / 0
Регистрация: 03.10.2011
Сообщений: 52
23.10.2011, 11:30  [ТС]
кстати, иногда в коде, указанном выше, если бысто нажимать по кнопкам, появляется
сбой при выполнении запрошенной операции с буфером обмена
1
 Аватар для час
48 / 48 / 2
Регистрация: 07.03.2011
Сообщений: 203
23.10.2011, 11:35
Поставь обработку исключений
VB.NET
1
2
3
4
5
        Try
 MsgBox(sender.text)
        Catch ex As Exception
 
        End Try
1
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.10.2011, 11:45
Код рабочий, а вот то что у тебя в первом посте - не уверен. Ищи ошибку там
0
 Аватар для DarKxXxLorD
9 / 9 / 0
Регистрация: 03.10.2011
Сообщений: 52
23.10.2011, 11:54  [ТС]
Мде, проблема...

VB.NET
1
My.Computer.Clipboard.SetText("22222222222")
Выдаёт ту-же ошибку. То сразу, то через несколько нажатий!
Ранее я писал "если быстро нажимать" - уже неважно как, быстро или медленно.

Такое впечатления, что что-то с буфером обмена
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.10.2011, 12:00
DarKxXxLorD, какие-то проги может в системе работают и тоже юзают буфер обмена, например, страшный злобный вирус-шпион от твоей подруги.

Ну а если серьезно - смотри работающий софт, у меня такое вылетает от TeamViewer-а, да и мало ли таких прог...
1
 Аватар для DarKxXxLorD
9 / 9 / 0
Регистрация: 03.10.2011
Сообщений: 52
23.10.2011, 12:33  [ТС]
Хмм, был виноват PROMT... Интересно.
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
24.10.2011, 00:20
а чего интересного? Буфер обмена системы - общая песочница для всех. Так что гадят туда тоже все. Так что, если возможно, не используй его для передачи другой проге важной инфы или что там у тебя...
0
 Аватар для DarKxXxLorD
9 / 9 / 0
Регистрация: 03.10.2011
Сообщений: 52
24.10.2011, 13:39  [ТС]
ну иначе не сделаешь, так как юзер должен получить буфер, чтобы просто вставить готовый текст в другую программу. Наладить взаимодействие на другом уровне... но как? Разве что файлами, и надо связываться с автором программы в любом случае.
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
24.10.2011, 14:05
ну если так...
0
 Аватар для am-wrag
11 / 11 / 2
Регистрация: 17.02.2011
Сообщений: 145
25.10.2011, 11:24
Похожая задача, разьясните по подробней.
А как определить что событие произошло именно с этой кнопкой а не какой другой. У меня допустим это 2е нажатие в графе текст бокса. На примере
VB.NET
1
2
3
Private Sub DarKxXxLorD(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
        'Code
    End Sub
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
25.10.2011, 11:26
Цитата Сообщение от am-wrag Посмотреть сообщение
sender
это объект, то есть, кнопка. Хоть у него и нет расширений, тем не менее, ты можешь на него опереться
VB.NET
1
Sender.Name
вернет имя кнопки, на которую нажали.
Или я неправильно понял?
1
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
25.10.2011, 11:38
ну если повтор кода идет только для кнопок, то можно объявить не
VB.NET
1
ByVal sender As System.Object
, а
VB.NET
1
ByVal sender As Button
и получить раннее связывание. То есть удобство в обращении.
2
 Аватар для DarKxXxLorD
9 / 9 / 0
Регистрация: 03.10.2011
Сообщений: 52
25.10.2011, 17:45  [ТС]
Я писал:
ну иначе не сделаешь, так как юзер должен получить буфер, чтобы просто вставить готовый текст в другую программу. Наладить взаимодействие на другом уровне... но как? Разве что файлами, и надо связываться с автором программы в любом случае.
А что, если известно имя процесса, с которым надо взаимодействовать. Например, дать другой программе фокус и передать требуемый текст методами SendKeys?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
25.10.2011, 18:19
DarKxXxLorD, разработчик в таком случае не несет ответственности за софт, стоящий на компьютере пользователя, вылетает буфер - разработчик то при чем.

А вопрос в чем? Чтобы передать какой-то текст в другую программу?
Если так, то это для отдельной темы, а то тут уже 2 разных вопроса обсудили, что не гуд.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2011, 18:19
Помогаю со студенческими работами здесь

Лексический анализатор(Упрощение процедуры)
Добрый вечер! Как можно упростить данную процедуру(она рабочая): public void Analizator() { string prog =...

Упрощение кода
<HTML> <HEAD> <TITLE> Вычисление периметра и площади</TITLE> <script language="JavaScript"> function Figure(name, length,...

Упрощение кода
Добрый Всем день. Есть на форме кнопка0 и надпись0 и т. д.Их много и кода идинакового в кнопках больше.Кнопка0 проверяет надпись0 и в...

Упрощение кода
Здравствуйте. Требуется упростить следующий код: int CountP = 110; List<double> lstMin = new List<double> ( ); bool...

упрощение кода
.vk{ display: block; padding: 12px 10px 15px; height: 13px; margin: 0px; font-weight: bold; font-size: 11px; color: #E8EFF7; ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru