powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Событие text1_Change
25 сообщений из 58, страница 1 из 3
Событие text1_Change
    #38893264
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форме form1 есть text1.text.
Я хотел в модуле кода прописать процедуру
Код: vbnet
1.
public sub form1.text1_change


А вылазит ошибка expected end of statement.
Получается события связанные с элементами управления формы нельзя прописывать в модуле?
Подскажите пожалуйста уважаемые спецы.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38893299
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обработчик события формы размещается только в модуле формы.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38893306
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaОбработчик события формы размещается только в модуле формы.
Эх жаль, хотел немного красоту навести. Ну да ладно. Спасибо!
...
Рейтинг: 0 / 0
Событие text1_Change
    #38893308
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто не мешает из обработчика в модуле формы вызывать функции/процедуры из common-модулей.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38893325
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНикто не мешает из обработчика в модуле формы вызывать функции/процедуры из common-модулей.
Вот за этот совет большое спасибо!!! Сам не допер
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894250
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите пожалуйста. У меня 3 формы и в каждой форме прописаны события text_change
Процедура события одинаковые для каждого text.text (исключающие ввод ненужных символов)

Я хотел навести красоту и убрать с кода формы эти процедуры, ибо они очень громоздкие и их на каждой форме по 5.
Но получается что мне придется делать дурную работу...т.е. переносить либо в 3 модуля от каждой формы по 5 процедур, либо в один модуль все 15 процедур.
Никак нельзя, чтобы с трех форм ссылались в один модуль на 5 общих процедур?
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894286
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronНикак нельзя, чтобы с трех форм ссылались в один модуль на 5 общих процедур?почему нельзя? Что мешает?

vdekameronПроцедура события одинаковые для каждого text.text (исключающие ввод ненужных символов)на будущее - в таких случаях делают UserControl, который внутри себя содержит и текстбок и способы его обработки
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894291
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proна будущее - в таких случаях делают UserControl, который внутри себя содержит и текстбок и способы его обработки
Про это надо почитать.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894314
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron Никак нельзя, чтобы с трех форм ссылались в один модуль на 5 общих процедур? Да легко. Просто передавай ещё в эту функцию ссылку на текущий контрол, ну и, возможно, на текущую форму. А в коде процедуры используй их, чтобы брать правильные значения и записывать результаты в правильные места.
А ещё учти, что очередной вызов может состояться до того, как закончится обработка предыдущего, и, во избежание, не увлекайся использованием глобальных и статических переменных.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894322
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaДа легко. Просто передавай ещё в эту функцию ссылку на текущий контрол
Не получится. Я спиз-ел. В каждой из этих процедур-событий принимают значения разные переменные.
Т.е. получается , что все они разные. Когда объяснял не учел это.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894333
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит их нужно унифицировать.

В идеале, ни одна смысловая строчка кода не должна повторяться. То есть если тебе потребуется внести изменения в любой алгоритм (а рано или поздно это требуется), ты должен делать это в одном месте, а не в десяти. Копипаста кода - зло, запомни.

Даже если у тебя есть несколько циклов For i=1 to 5, где 5 - это, скажем, количество текстбоксов на форме, то 5 должна быть объявлена константой и вынесена в определения. Потому что, кнопок рано или поздно станет 6, и ты задолбаешься искать все эти пятерки в коде. А если это, скажем, массив текстбоксов, тогда тем более - циклы должны быть до MyTextbox.Ubound, а не до 5
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894338
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЗначит их нужно унифицировать.
Понял
...
Рейтинг: 0 / 0
Событие text1_Change
    #38894340
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProВ идеале, ни одна смысловая строчка кода не должна повторяться.
Мне еще до этого как до парижа пешком)))
...
Рейтинг: 0 / 0
Событие text1_Change
    #38897176
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proна будущее - в таких случаях делают UserControl

Помогите пожалуйста сделать этот User Control. Я его добавил в проект. Мои действия дальше?
...
Рейтинг: 0 / 0
Событие text1_Change
    #38897209
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыть учебник и читать )
После прочтения непонятное спросить )
...
Рейтинг: 0 / 0
Событие text1_Change
    #38897305
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProОткрыть учебник и читать )
А я разве против?) Я за любой здравый кипишь) Я прочел книгу для начинающих, где автор постарался дать где нужно больше инфы, где посчитал менее значимым - меньше.
О User Control вообще не посчитал нужным говорить.
Поэтому и спрашивал у вас посоветовать хорошую книгу, что-то среднее м/у новичком и профи, как вы.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38897381
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда вкратце:

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

Первый шаг - масштабирование. В событии Usercontrol_Resize нужно спозиционировать и смасштабировать все вложенные контролы.

Потом добавляешь нужные свойства и события, наполняешь контрол функциональностью.

Можешь попробовать воспользоваться мастером создания юзерконтрола и посмотреть, чего он там нагенерит по умолчанию.
В сожалению, в VB нельзя взять и унаследовать какой-то другой контрол. К примеру, взять текстбокс и нарастить его функциональность. Все нужные свойства/методы/события придется создавать с нуля.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38897706
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроцедура события одинаковые для каждого text.text (исключающие ввод ненужных символов)
Я хотел навести красоту и убрать с кода формы эти процедуры, ибо они очень громоздкие и их на каждой форме по 5.
В каждом текст боксе свои ограничения?
Если ограничения разные, то передавать в процедуру проверки и параметры (кроме того что было предложено выше).
А профедура проверки, естественно, только одна!
И свой контрол, как мне кажется, в данном случае не нужен
...
Рейтинг: 0 / 0
Событие text1_Change
    #38898624
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755В каждом текст боксе свои ограничения?
Код: vbnet
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.
Private Sub VerhniiB_Change() 
        If Vihod Then Exit Sub  

    Dim Val1 As String
    Val1 = VerhniiB.Text
           Val1 = Replace(Val1, "d", "h")
           Val1 = Replace(Val1, "D", "h")
           Val1 = Replace(Val1, "e", "h")
           Val1 = Replace(Val1, "E", "h")
                 
    If Len(Val1) = 0 Then
        Per1 = ""
        VelVB = 0
        Exit Sub
    End If
        
    Val1 = Replace(Val1, ".", ",") 
    Select Case True
        Case Val1 Like ",*": Val1 = "0" & Val1
        Case Val1 Like "*,": Val1 = Val1 & "0"
        End Select
            
        If IsNumeric(Val1) Then
            Per1 = VerhniiB.Text
            
                  KolS = Len(Per1)
                  Simvol = Mid(Per1, KolS, 1)
            Select Case Simvol
                Case "+": Per1 = Replace(Per1, Simvol, ""): VerhniiB.Text = Per1 
                Case "-": Per1 = Replace(Per1, Simvol, ""): VerhniiB.Text = Per1
            End Select
                  
                  Simvol = Mid(Per1, 1, 1) 
            Select Case Simvol
                Case "+", "-", ".", ",": Per1 = Replace(Per1, Simvol, ""): VerhniiB.Text = Per1 
            End Select
        Else
            Vihod = True
            VerhniiB.Text = Per1
        End If
        VerhniiB.SelStart = Len(VerhniiB))
        If KolS1 <> KolS Then
            VelVB = Val(Replace(Val1, ",", "."))
        Else
            VelVB = Val(Replace(Val1, ",", ".")) val("2.15")
            VerhniiB.SelStart = Len(VerhniiB)
        End If
                 Vihod = False
                 KolS1 = KolS
       
       
        If Not IsNumeric(Val1) And IsNumeric(Replace(Per1, ".", ",")) Then VelVB = Replace(Per1, ".", ",")


End Sub


В каждом текстбоксе одинаковые ограничения, но в каждом из них получает значение определенная переменная в этом текстбоксе это - VelVB, в другом, другая переменная и т.д. Поэтому и не могу использовать один код для каждого текстбокса
...
Рейтинг: 0 / 0
Событие text1_Change
    #38898705
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronПоэтому и не могу использоватьНеверный вывод.
Значит надо вынести переменную в свойство юзерконтрола, или передавать ее ByRef в методе, или возвращать ее в событии, или использовать массив переменных или коллекцию, или.... Правило сохраняется - код повторяться не должен.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38898734
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
 VelVB = Val(Replace(Val1, ",", ".")) val("2.15")


??
...
Рейтинг: 0 / 0
Событие text1_Change
    #38898738
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
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.
Option Explicit
Dim Vihod As Boolean
Dim VelVB

Private Sub VerhniiB_Change()
        If Vihod Then Exit Sub
        QWERT VerhniiB, VelVB
End Sub

Sub QWERT(Kontr As TextBox, PEREM)
Dim Per1, KolS, Simvol, KolS1
    Dim Val1 As String
    Val1 = VerhniiB.Text
           Val1 = Replace(Val1, "d", "h")
           Val1 = Replace(Val1, "D", "h")
           Val1 = Replace(Val1, "e", "h")
           Val1 = Replace(Val1, "E", "h")
                 
    If Len(Val1) = 0 Then
        Per1 = ""
        PEREM = 0
        Exit Sub
    End If
        
    Val1 = Replace(Val1, ".", ",")
    Select Case True
        Case Val1 Like ",*": Val1 = "0" & Val1
        Case Val1 Like "*,": Val1 = Val1 & "0"
        End Select
            
        If IsNumeric(Val1) Then
            Per1 = VerhniiB.Text
            
                  KolS = Len(Per1)
                  Simvol = Mid(Per1, KolS, 1)
            Select Case Simvol
                Case "+": Per1 = Replace(Per1, Simvol, ""): VerhniiB.Text = Per1
                Case "-": Per1 = Replace(Per1, Simvol, ""): VerhniiB.Text = Per1
            End Select
                  
                  Simvol = Mid(Per1, 1, 1)
            Select Case Simvol
                Case "+", "-", ".", ",": Per1 = Replace(Per1, Simvol, ""): VerhniiB.Text = Per1
            End Select
        Else
            Vihod = True
            VerhniiB.Text = Per1
        End If
        Kontr.SelStart = Len(VerhniiB)
        If KolS1 <> KolS Then
            PEREM = Val(Replace(Val1, ",", "."))
        Else
            PEREM = Val(Replace(Val1, ",", ".")) 'val("2.15")
            VerhniiB.SelStart = Len(VerhniiB)
        End If
                 Vihod = False
                 KolS1 = KolS
        If Not IsNumeric(Val1) And IsNumeric(Replace(Per1, ".", ",")) Then PEREM = Replace(Per1, ".", ",")

End Sub
...
Рейтинг: 0 / 0
Событие text1_Change
    #38899025
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755
Код: vbnet
1.
 VelVB = Val(Replace(Val1, ",", ".")) val("2.15")



??

За это прошу прощения, вычистил свои комменты не до конца.
За код спасибо. Парадокс но когда мне говорят сделать как-то, я ловлю ступор. когда я вижу код, сразу понимаю что все очень просто.(( Снова убеждаюсь что практики у меня очень мало.

Единственное для меня есть 2 принципиальные неточности в вашем коде.
1)Строка
Код: vbnet
1.
Kontr.SelStart = Len(VerhniiB)

мешающая добавлять символы в середину числа.
2)Переменную Per1 я объявил глобально в окне кода, т.к. Если ее объявить локально в процедуре, то при вводе в текстовое поле любой буквы, все число стерается. Чего быть не должно.
А вообще спасибо что потратили свое время, чтобы вникнуть в этот код.
...
Рейтинг: 0 / 0
Событие text1_Change
    #38899026
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProПравило сохраняется - код повторяться не должен.
Похоже, что так тоже подойдет, как привел Алекс
...
Рейтинг: 0 / 0
Событие text1_Change
    #38899399
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесть 2 принципиальные неточности в вашем коде.
В моём коде?
Я в код даже не вникал! Это ваш код!!
Код: vbnet
1.
Kontr.SelStart = Len(VerhniiB)


Было сказано, что переменная VelVB в данном случае будет меняться, я и вынес её в глобальные.
За другие переменные ничего не было сказано. И я понятия не имею ничего про них.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Событие text1_Change
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]