Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как организовать автовыделение содержимого TextBox при получении фокуса?

09.10.2016, 06:07. Показов 2558. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
На VB-6 автовыделение реализовывалось так:
Visual Basic
1
2
3
4
Private Sub Text1_GotFocus()
  Text1.SelStart = 0
  Text1.SelLength = Len(Text1.Text)
End Sub
но почему подобное не даёт никакого результата на VB.NET?
VB.NET
1
2
3
4
    Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
        TextBox1.SelectionStart = 0
        TextBox1.SelectionLength = Len(TextBox1.Text)
    End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2016, 06:07
Ответы с готовыми решениями:

Как организовать автовыделение содержимого TEdit при получении фокуса от мыши?
Всем здравствуйте. При попадании фокуса в TEdit от клавиши <TAB> и установленном свойстве AutoSelect происходит автовыделение...

Как в коде разметки сделать, изменение ширины Grid при получении кнопкой фокуса
Здравствуйте форумчане. У меня такой вопрос: есть грид, в нем кнопка. Как в коде разметки сделать, к примеру, изменение ширины этого...

Как организовать вывод данных в DataGridView в зависимости от содержимого textbox?
Добрый вечер! Как можно организовать вывод данных в datagridview в зависимости от того, что будет выведено в textbox? Пробовала таким...

20
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.10.2016, 09:03
jkrnd, Дает. Задайте фокус клавишей Tab.
Если будете щелкать мышкой - то выделение будет, разумеется, тут же сниматься.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 10:18  [ТС]
Памирыч, в том то и вопрос, как по щелчку мыши всё выделить, а не снять выделение.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.10.2016, 10:19
jkrnd, ну наверно в событии mouseClick.
Только Вы потом замучаетесь выделение снимать
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 11:56  [ТС]
Eсть TextBox1. Кликая по нему мышью мы попадаем в обработчик TextBox1_Enter. Перебирая элементы формы клавишей TAB, мы также попадаем в обработчик TextBox1_Enter. Как различить, чем был инициирован вход в TextBox?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.10.2016, 12:16
По правде сказать, не увидел ничего в событии, раскрывающее сабж.

jkrnd, а в чем конечная задача?
1
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
09.10.2016, 13:10
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
в том то и вопрос, как по щелчку мыши всё выделить, а не снять выделение.
Может так
VB.NET
1
2
3
4
5
6
7
8
9
10
    Private WithEvents T As New Timer With {.Interval = 150}
 
    Private Sub TextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
        T.Start()
    End Sub
 
    Private Sub T_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles T.Tick
        T.Stop()
        If TextBox1.Focused Then TextBox1.SelectAll()
    End Sub
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 13:33  [ТС]
Step_UA, спасибо, что навели на правильную мысль. Но создавать таймер для такой незначительной задачи это круто
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
09.10.2016, 13:40
Без таймера необходимо при клике вычислять время, прошедшее с момента получения фокуса и принимать решение о выделении (пользователь может перейти по Tab и кликнуть через минуту) - что имхо будет более громоздко
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 13:45  [ТС]
Step_UA, а если таких окон сотня?
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 13:50  [ТС]
Нужно попытаться повторить эффект, прилагаемый в exe-шнике.
Вложения
Тип файла: rar Heat.rar (13.2 Кб, 10 просмотров)
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 13:51  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
конечная задача
при попадания на текстовое окно фокуса от таб выделять содержимое
если содержимое уже выделено то клик мыши по окну снимает выделение
если содержимое окна не выделено и клик первый после получения фокуса, то выделять содержимое (следующий клик по выделенному снимает выделение)

Добавлено через 34 минуты
Памирыч, Пожалуйста, объедините эту тему с Как организовать автовыделение содержимого TextBox при получении фокуса?, сделав последнюю главной.
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
09.10.2016, 13:56
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
а если таких окон сотня?
Ничем не отличается от того, если бы работал Ваш код из 1 поста - используем один обработчик события для всех необходимых (100500 элементов) ... с минимальными изменениями кода
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 14:12  [ТС]
Step_UA, то есть в T_Tick организовать цикл с проверкой на каком из окон фокус?

Добавлено через 11 минут
Step_UA, У меня эта задача (автовыделение) решается для элемента управления (внутри его кода). Получается для каждого создаваемого экземпляра элемента управления будет создан свой таймер. Как бы тут без таймера извернуться.
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
09.10.2016, 14:27
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
то есть в T_Tick организовать цикл с проверкой на каком из окон фокус?
Имхо это излишне, можно при входе сохранять элемент в переменой
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private WithEvents T As New Timer With {.Interval = 150}
    Private CurrentTextBox As TextBox
 
    ' указываем события всех необходимых элементов или добавляем обработчик события через AddHandler 
    Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter
        CurrentTextBox = sender
        T.Start()
    End Sub
 
    Private Sub T_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles T.Tick
        T.Stop()
        If CurrentTextBox.Focused Then CurrentTextBox.SelectAll()
    End Sub
3
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
09.10.2016, 14:51
М.б. устроит такой вариант (если правильно понял, о чем речь)
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    TextBox1.Tag = False
    TextBox2.Tag = False
    TextBox3.Tag = False
End Sub
Private Sub TextBoxs_MouseClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox3.MouseClick, TextBox2.MouseClick, TextBox1.MouseClick
    Dim tbx As TextBox = CType(sender, TextBox)
    Dim bb As Boolean = CType(tbx.Tag, Boolean)
    If bb Then
        tbx.SelectionStart = 0
        tbx.SelectionLength = Len(tbx.Text)
    Else
        tbx.SelectionStart = Len(tbx.Text)
        tbx.SelectionLength = 0
    End If
    tbx.Tag = Not bb
End Sub
Добавлено через 14 минут
Улучшенный вариант
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub TextBoxs_MouseClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox3.MouseClick, TextBox2.MouseClick, TextBox1.MouseClick
    Dim tbx As TextBox = CType(sender, TextBox)
    Dim bb As Boolean = CType(tbx.Tag, Boolean)
    If bb Then
        tbx.SelectionStart = 0
        tbx.SelectionLength = Len(tbx.Text)
    Else
        tbx.SelectionStart = Len(tbx.Text)
        tbx.SelectionLength = 0
    End If
    For Each tx As Control In Me.Controls
        If TypeOf (tx) Is TextBox Then
            tx.Tag = True
        End If
    Next
    tbx.Tag = Not bb
End Sub
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 15:55  [ТС]
Step_UA, то что надо

Добавлено через 2 минуты
ovva, спасибо, но это немного не то. В посте №11 есть готовое решение (писано давно на VB-6). Запустив его станет ясно, что хочется получить.

Добавлено через 30 минут
Step_UA, а можно добавить к Вашему коду кроме выделения содержимого ещё выравнивание содержимого по левому краю а при уходе фокуса возвращаться к выравниванию по правому краю (возврат по TAB у меня не получается, при перемещении фокуса кликами мыши - всё ОК):
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Private WithEvents T As New Timer With {.Interval = 50}
    Private CurrentTextBox As TextBox
 
    ' указываем события всех необходимых элементов или добавляем обработчик события через AddHandler 
    Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter, TextBox4.Enter
        CurrentTextBox = sender
        T.Start()
    End Sub
    Private Sub T_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles T.Tick
        T.Stop()
        If CurrentTextBox.Focused Then
            CurrentTextBox.TextAlign = HorizontalAlignment.Left
            CurrentTextBox.SelectAll()
        End If
    End Sub
    Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave, TextBox2.Leave, TextBox3.Leave, TextBox4.Leave
        CurrentTextBox.TextAlign = HorizontalAlignment.Right
    End Sub
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 16:10  [ТС]
картинка с результатом:
Миниатюры
Как организовать автовыделение содержимого TextBox при получении фокуса?  
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
09.10.2016, 16:47
Цитата Сообщение от jkrnd Посмотреть сообщение
возврат по TAB у меня не получается
К сожалению у меня тоже не получается и идей нет (
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.10.2016, 17:37  [ТС]
Step_UA, получилось! только правда для одного отдельного окна, и по TAB и по клику всё OK:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private WithEvents T As New Timer With {.Interval = 50}
    Dim fEnter As Boolean
    ' указываем события всех необходимых элементов или добавляем обработчик события через AddHandler 
    Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
        sender.SelectionStart = 0
        sender.SelectionLength = 0
        fEnter = True
        T.Start()
    End Sub
    Private Sub T_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles T.Tick
        T.Stop()
        If fEnter = True Then
            TextBox1.SelectAll()
            TextBox1.TextAlign = HorizontalAlignment.Left
        Else
            TextBox1.TextAlign = HorizontalAlignment.Right
        End If
    End Sub
    Private Sub TextBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
        fEnter = False
        T.Start()
    End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2016, 17:37
Помогаю со студенческими работами здесь

Событие текстбокса - при получении фокуса
Какое событие выполняется при установки фокуса на определенный текстбокс?

Дергание панели при получении фокуса
Столкнулся с такой проблемой, панель по определению не может иметь фокуса, поэтому вручную изменил, но при получении фокуса панелью,...

Обновление формы при получении фокуса
Условно есть 2 формы: в первой вносятся данные в поля во второй выполняются вычисления, в том числе используя данные из первой формы ...

Изменение цвета кнопки при получении фокуса при переходе по TAB
Здравствуйте! Подскажите пожалуйста: как настроить изменение цвета кнопки при получении фокуса при переходе по ТАВ (т.е. на клавиатуре,...

Изменение вида кнопки при получении и потере фокуса
Приветик всем. Возник вопросик по поводу кнопок. Хочу вставить нарисованные мною кнопки в проект, причем чтобы когда наводила на кнопку...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь 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. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru