Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Отображение курсора(каретки) в TextBox


Автор: mxmaks 16.1.2011, 16:43
Приветствую Всех и С Новым Годом!
Вопрос в том, чтобы отобразить мигающий курсор (каретку) в конце вводимой информации в текстбоксах?
Информация в textbox вводится с кнопок... (без клавиатуры)
С клавиатуры курсор отображается нормально, а с кнопок пропадает...
В какую обработку его вставить...
В VB6 были Hide.Caret и Show.Caret, как реализовать на VB.NET...

Автор: diadiavova 16.1.2011, 18:17
mxmaks, Просто когда ты нажимаешь на кнопку фокус переводится с текстбокса на нее. Верни его обратно и все.

Автор: mxmaks 16.1.2011, 21:44
Благодарю за отклик, но попытался осмыслить... не получилось...
txt.Focus->btn.Focus->txt.Focus...
Как-то так, или я глючу...?

Автор: diadiavova 16.1.2011, 21:53
Цитата(mxmaks @  16.1.2011,  21:44 Найти цитируемый пост)
txt.Focus

 smile После добавления текста вызывай этот метод.

Автор: mxmaks 16.1.2011, 22:26
После каждого нажатия на btn?...
Шутка: этого хрена с бугра в нашей деревне всякий знает...,  а я с райцентра...
А если серьезно, есть функция Caret, думаю, ее надо применять или можно без нее...
В VB6 были Hide.Caret и Show.Caret... работали...(вводишь букву, а курсор как положено справа моргает, видно где находишься...)
В VB.NET как-то по другому, в MSDN есть инфа, но с ней еще не экспериментировал, подумал кто-нибудь сталкивался с этим...



Автор: diadiavova 16.1.2011, 23:20
Цитата(mxmaks @  16.1.2011,  22:26 Найти цитируемый пост)
В VB6 были Hide.Caret и Show.Caret... 

Я ведь тебе объяснил причину исчезновения курсора. Дело не в том, что исчезает курсор, а в том, что ты фокус переводишь на другой контрол.
Цитата(mxmaks @  16.1.2011,  22:26 Найти цитируемый пост)
После каждого нажатия на btn?...

Ну это уже твое дело как это реализовывать. Можно сделать так, чтобы на кнопку фокус вообще не переходил (свойство CanFocus), можно обрабатывать событие TextChanged текстбокса и переводить фокус в нем, можно делать это в обработчиках нажатия кнопок. 
Цитата(mxmaks @  16.1.2011,  22:26 Найти цитируемый пост)
(вводишь букву, а курсор как положено справа моргает, видно где находишься...

Но когда на текстбоксе нет фокуса, каретка и там моргать не будет.

Автор: mxmaks 16.1.2011, 23:28
Благодарю...
Буду пробовать...

Автор: diadiavova 16.1.2011, 23:36
Да, и еще одно. Как я понимаю, у тебя будет несколько кнопок, выполняющих одинаковую работу(добавление символа в текстбокс). В данном случае нет смысла обрабатывать клики отдельно, можно вместо этого просто свойству Tag каждой кнопки присвоить тот символ, который она будет добавлять и написать один обработчик для всех кнопок, который будет добавлять значение свойства Tag отправителя события в текстбокс и переводить фокус.

Автор: mxmaks 17.1.2011, 18:35
Приветствую!
Все сделал как Вы посоветовали, все работает, только не могу убрать выделение (синий фон, как в системе...)
Хотелось, чтобы был только курсор, а выделение сбивает и раздражает...
Ищу в MSDN, может есть готовая идея...
А кнопки работают в одном обработчике...

Автор: diadiavova 17.1.2011, 23:35
А ты как текст добавляешь? Если присвоением значения свойству текст, то так и должно быть. Добавляется текст методом AppendText. А выделение не снимается, а просто устанавливается его начало и длина (свойства SelectionStart и Selection Lenght, если мне не изменяет склероз).

Автор: mxmaks 18.1.2011, 22:06
Приветствую!
Поясню, пишу своему мальчишке "обучалку": форма-текстбокс-кнопки (с буквами и цифрами).
Работа мышью (жмет кнопку с буквой или цифрой) и пишет слова или решает примеры...
Хотелось, чтобы было красиво, да и самому осмыслить и подучиться...
В vb6 вроде все было нормально, а в vb.net споткнулся...
Добавляю как String, потом преобразую в Val (если примеры-вычисления)
И, кстати, почему в примере 0.4+0.3= не решает, как будто нет одного значения, остальное все решает...
Да, текст выделяется, но курсор в конце, а выделение не снимается.
При вводе с "клавы" нормально (курсор в конце, текст не выделен).
Свойство HideSelection (TextBox) работает, но криво...

Автор: diadiavova 18.1.2011, 22:33
mxmaks, ты так и не написал как добавляешь текст. Что тут можно сказать? Как можно решать проблему, если нет кода, который ее вызвал. Насколько я помню, при добавлении текста с помощью AppendText этой проблемы быть не должно.
Цитата(mxmaks @  18.1.2011,  22:06 Найти цитируемый пост)
0.4+0.3= 

Это опять-таки зависит от того, каким способом ты это решаешь и текстбоксы тут явно не причем. Но думаю, что скорей всего надо в качестве разделителя десятичных разрядов использовать запятую.

Автор: mxmaks 18.1.2011, 23:14
Текст добавляю как стринг, кнопке присвоен символ буквы...
Вычисляет только больше 1 с точкой, перевод из стринга через Val ...
Посмотрю на AppendText 

Автор: diadiavova 19.1.2011, 03:06
Цитата(mxmaks @  18.1.2011,  23:14 Найти цитируемый пост)
Вычисляет только больше 1 с точкой, перевод из стринга через Val ...

Честно говоря, не знаю как эта функция работает, так что ничего сказать не могу. В дотнете лучше использовать Double.Parse или Double.TryParse, тогда можно будет установить и параметры преобразования(например точку или запятую в качестве разделителя).

Автор: mxmaks 19.1.2011, 20:38
Добрый вечер!
Посмотри код, может что-то проявится...
Код


    Dim n As Boolean ' начало ввода

    Private Sub Alfavit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click, btn2.Click
        ' процедура обработки кнопок
        Dim Alfavit As String = CType(sender, Button).Text

        If n = True Then txt1.Text = Alfavit : n = False
        If n = False Then txt1.Text = txt1.Text & Alfavit
        txt1.Focus()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        btn1.Text = "А" : btn2.Text = "М" : btnRes.Text = "+"
        txt1.Clear()
    End Sub

    Private Sub btnRes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRes.Click
        Dim x As Double = Val(txt1.Text)
        Dim y As Double = Val(txt2.Text)
        Dim z As Double

        ' сложение
        If x And y <> 0 Then
            z = x + y
            lblRes.Text = z.ToString
        End If
    End Sub

...

Автор: diadiavova 19.1.2011, 20:51
Код

    Private Sub Alfavit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click, btn2.Click
        txt.AppendText(sender.Text)
        txt1.Focus()
    End Sub

    Private Sub btnRes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRes.Click
        Try
            Dim x = Double.Parse(txt1.Text)
            Dim y = Double.Parse(txt2.Text)
            ' сложение
            lblRes.Text = (x +y).ToString
        Catch ex As Exeption
            lblRes.Text = "Введены неверные значения"
        End Try
    End Sub


Автор: mxmaks 22.1.2011, 11:52
Приветствую!
По поводу отображения курсора вопрос можно считать решенным, работает, только подшлифовать...
А вот считать почему-то не хочет... Такое ощущение, что округляется...
0.51+0.1=0,61 , а
0.5 +0.1=... Это вариант с использованием Val(txt1.Text), 
а вариант с Double.Parse(txt1.Text) не воспринимает, с целыми числами работает...


Автор: diadiavova 22.1.2011, 15:47
Цитата(mxmaks @  22.1.2011,  11:52 Найти цитируемый пост)
а вариант с Double.Parse(txt1.Text) не воспринимает, с целыми числами работает...

Этот вариант учитывает региональные стандарты. По умолчанию используются те, которые соответствуют настройкам операционной системы. Если в системе все настройки русские, то и надо использовать тот разделитель, который у нас принят, а именно - запятую(а не точку). Это можно изменить, использовав перегрузку метода Parse, принимающую аргумент типа IFormatProvider, только зачем?

Автор: mxmaks 22.1.2011, 22:05
Добрый вечер!
Нашел ошибку с вычислениями (проводил проверку на инфу в текстбоксах, If x And y <> 0 Then...), закомментил и все считает ...
Буду думать, как проверять наличие значений в текстбоксах...
В принципе, тему можно закрывать, ответы исчерпывающие.
Благодарю, приятно было общаться.
Удачи по жизни!

Автор: diadiavova 22.1.2011, 22:22
Цитата(mxmaks @  22.1.2011,  22:05 Найти цитируемый пост)
Нашел ошибку с вычислениями (проводил проверку на инфу в текстбоксах, If x And y <> 0 Then...)

Заметь: в моем примере этой строки не было. Почему тебе все время так сильно хочется сделать по-своему? У меня ведь есть простая проверка корректности ввода. Еще лучше для этой цели использовать TryParse вместо Parse.
Цитата(mxmaks @  22.1.2011,  22:05 Найти цитируемый пост)
Буду думать, как проверять наличие значений в текстбоксах...

А что там думать?
Код

If txt1.Text.Length <> 0 Then

Цитата(mxmaks @  22.1.2011,  22:05 Найти цитируемый пост)
В принципе, тему можно закрывать, ответы исчерпывающие.

Тогда не забывай помечать вопрос как решенный. smile 

Автор: mxmaks 23.1.2011, 21:21
Последний штрих_если есть функция проверки корректности ввода, то как она называется...
Будь добр, подскажи...

Автор: diadiavova 23.1.2011, 23:44
Цитата(mxmaks @  23.1.2011,  21:21 Найти цитируемый пост)
если есть функция проверки корректности ввода, то как она называется

В смысле? У тебя ввод будет корректным, если парсинг числа пройдет успешно. 

Автор: Freyzer 25.1.2011, 17:48
Цитата(mxmaks @ 23.1.2011,  21:21)
Последний штрих_если есть функция проверки корректности ввода, то как она называется...

Хоть тема и помеченна как решенная.

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

Автор: diadiavova 25.1.2011, 19:10
Цитата(Freyzer @  25.1.2011,  17:48 Найти цитируемый пост)
Еще есть понятие регулярных выражений

Использовать регулярки для проверки возможности преобразования строки в число - это все равно, что микроскопом гвозди забивать.

Автор: Freyzer 26.1.2011, 13:17
Цитата(diadiavova @ 25.1.2011,  19:10)
Цитата(Freyzer @  25.1.2011,  17:48 Найти цитируемый пост)
Еще есть понятие регулярных выражений

Использовать регулярки для проверки возможности преобразования строки в число - это все равно, что микроскопом гвозди забивать.

Да, не спорю, просто я о тех и о других в комплексе впервые узнал, вот и вошло в привычку раз пишу о метасимволах упоминать и о регулярных выражениях.

Автор: diadiavova 26.1.2011, 13:32
Цитата(Freyzer @  26.1.2011,  13:17 Найти цитируемый пост)
раз пишу о метасимволах упоминать

О каких метасимволах речь?

Автор: Freyzer 27.1.2011, 12:03
ДВ, ты мастер, я говорил вот об http://ru.wikipedia.org/wiki/Regex, тебе удалось выбить меня из колеи. А разве нечто такое же не используеться в десктоповых приложениях, для проверки вводимости данных?

Автор: diadiavova 27.1.2011, 12:13
Цитата(Freyzer @  27.1.2011,  12:03 Найти цитируемый пост)
я говорил вот об этом

Ну это регулярки, а метасимволы это что? smile 
Цитата(Freyzer @  27.1.2011,  12:03 Найти цитируемый пост)
А разве нечто такое же не используеться в десктоповых приложениях, для проверки вводимости данных? 

Регулярки можно и в десктопе использовать.

Автор: Freyzer 27.1.2011, 12:56
Там и метасимволы упоминаються, все в комплексе

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)