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


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

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

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

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

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

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

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

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

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

Можешь попробовать воспользоваться мастером создания юзерконтрола и посмотреть, чего он там нагенерит по умолчанию.
В сожалению, в VB нельзя взять и унаследовать какой-то другой контрол. К примеру, взять текстбокс и нарастить его функциональность. Все нужные свойства/методы/события придется создавать с нуля.
...
Рейтинг: 0 / 0
06.03.2015, 23:17
    #38897706
alex77755
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие text1_Change
авторПроцедура события одинаковые для каждого text.text (исключающие ввод ненужных символов)
Я хотел навести красоту и убрать с кода формы эти процедуры, ибо они очень громоздкие и их на каждой форме по 5.
В каждом текст боксе свои ограничения?
Если ограничения разные, то передавать в процедуру проверки и параметры (кроме того что было предложено выше).
А профедура проверки, естественно, только одна!
И свой контрол, как мне кажется, в данном случае не нужен
...
Рейтинг: 0 / 0
09.03.2015, 02:06
    #38898624
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие text1_Change
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
09.03.2015, 11:15
    #38898705
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие text1_Change
vdekameronПоэтому и не могу использоватьНеверный вывод.
Значит надо вынести переменную в свойство юзерконтрола, или передавать ее ByRef в методе, или возвращать ее в событии, или использовать массив переменных или коллекцию, или.... Правило сохраняется - код повторяться не должен.
...
Рейтинг: 0 / 0
09.03.2015, 12:20
    #38898734
alex77755
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие text1_Change
Код: vbnet
1.
 VelVB = Val(Replace(Val1, ",", ".")) val("2.15")


??
...
Рейтинг: 0 / 0
09.03.2015, 12:26
    #38898738
alex77755
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие text1_Change
Код: 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
09.03.2015, 19:05
    #38899025
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Событие text1_Change
alex77755
Код: vbnet
1.
 VelVB = Val(Replace(Val1, ",", ".")) val("2.15")



??

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

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

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


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


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