Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Функция проверки заполнения TextBox

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет написал функцию которая отыскивает все TextBox'ы и проверяет их на заполненность. И в случае нахождения пустого перекрашивает его.

Код:
 
Function CheckInput()
        For Each C As Control In Me.Controls
            If TypeOf C Is Panel Then
                For Each D As Control In C.Controls
                    If TypeOf D Is TextBox Then
                        If D.Text = Nothing Then
                            D.BackColor = Color.Pink
                            CheckInput = False
                        Else : CheckInput = True
                        End If
                    End If
                Next
            End If
        Next
End Function
 

Но почему то функция возвращает true если хотя бы один textbox заполнен.
Помогите подправить код, пожалуйста.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 16:48 04-08-2013
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
Попробуй
Код:
 
Function CheckInput()  
        CheckInput = True
        For Each C As Control In Me.Controls  
            If TypeOf C Is Panel Then  
                For Each D As Control In C.Controls  
                    If TypeOf D Is TextBox Then  
                        If D.Text = Nothing Then  
                            D.BackColor = Color.Pink  
                            CheckInput = False    
                        End If  
                    End If  
                Next  
            End If  
        Next  
End Function  
 

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:05 04-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
 
Вариант такой:

Код:
 
Function CheckInput()
        For Each C As Control In Me.Controls
            If TypeOf C Is Panel Then
                For Each D As Control In C.Controls
                    If TypeOf D Is TextBox Then
                        If D.Text = Nothing Then
                            D.BackColor = Color.Pink
                            Return False
                        Else
                            CheckInput = True
                            D.BackColor = Color.White
                        End If
 
                    End If
                Next
            End If
        Next
End Function
 

 
Логика работает отлично, то что нужно.
 
Некрасиво вот что, окрашиваться стали не все пустые textbox, а только тот на котором функция вернула false. Есть идеи?

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 20:32 04-08-2013
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
вообще не правильно закладываться на то, что текстбокс лежит на только на верхней панели - а если он лежит в панели, которая на другой панели или вообще групбоксе?
 
Так что я бы делал рекурсивно:

Код:
 
  Function IsCorrectInput(Ctrl As Control)
        Dim Result = True
        If TypeOf Ctrl Is TextBox Then
            Result = Ctrl.Text <> Nothing
            If Not Result Then
                Ctrl.BackColor = Color.Pink
            End If
        End If
        For Each C As Control In Ctrl.Controls
            Result = Result And IsCorrectInput(C)
        Next
        Return Result
    End Function
 

..
   If Not IsCorrectInput(Me) Then
        MessageBox.Show("Не все текстбоксы заполнены")
   End If

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 21:05 04-08-2013 | Исправлено: A_V, 21:08 04-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp Спасибо, помогло.
 
A_V

Цитата:
вообще не правильно закладываться на то, что текстбокс лежит на только на верхней панели

 
Это почему? Это же я их туда и заложил. Мне нужно проверить textbox'ы только на панелях.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 12:50 06-08-2013
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
 
просто вообще правильно, когда логика работы программы не зависит от изменения внешего вида - например перетаскивания контролов в другой контейнер. если нужны только заданные эдиты,а не все, лучше тогда указать конкретное имя(имена) панелей в коде, тогда по крайней мере код не отвалится втихую  при изменении внешнего вида.
ну, хозяин - барин, решать вам )

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 14:43 06-08-2013 | Исправлено: A_V, 14:45 06-08-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Функция проверки заполнения TextBox


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru