Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6317
Последний выпуск: 19.06.2015

выполнение одной и той же операции

2.0K
19 октября 2012 года
alexandrv
38 / / 21.01.2010
Здравствуйте! Есть форма с рядами текстовых полей и в конце объект метка (например 20 строк подобных)

Для первой строки я написал код, который вычисляет среднее в первых трех текстовых блоках и результат записывает в Label.(код ниже)
Вопрос: неужели для вычисления среднего во всех остальных 19 строках нужно ссылаться опять на свою процедуру и повторять эти процедуры 19 раз? Можно ли сделать проще для вычисления среднего по остальным строкам?

Private Sub TextBox1_Change()
sred_ball
End Sub

Private Sub TextBox2_Change()
sred_ball
End Sub

Private Sub TextBox3_Change()
sred_ball
End Sub

Public Sub sred_ball()
Label1.Caption = (Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text)) / 3
End Sub
85K
20 октября 2012 года
Виталий Голованов
5 / / 13.10.2012
Вспомните, что существуют массивы элементов управления. У каждого из них есть свой индекс в этом массиве (свойство Index) и процедура обработки одна на всех. Вот, к примеру, как бы мог выглядеть Ваш пример:


Код:
'Считает среднее
'Параметр - число текстовых окон на форме
Public Sub sred_ball(ByVal textBoxCount As Long)
    Dim ctl As Control 'от Control наследуют все элементы управления в ВБ, значит могут быть им представлены
   Dim lngValue As Long 'считаем сумму в эту переменную
   
    'перебираем все элементы управления на нашей форме
   For Each ctl In Me.Controls
        'если это текстовое поле и текст в нем можно представить как число
       If TypeOf ctl Is TextBox Then _
            If IsNumeric(ctl.Text) Then _
                lngValue = lngValue + CLng(ctl.Text) 'прибавляем к переменной записанное в текстовом поле число
   Next
   
    'теперь среднее
   lngValue = lngValue \ textBoxCount
   
    'я люблю функцию Format$ - работает быстро и имеет кучу возможностей по форматированию вывода
   Me.Label1.Caption = Format$(lngValue, "### ### ### ### ### ### ### ### ### ### ### ### ##0")
End Sub

'будет вызываться при каждом изменении текста в текстовых полях, которые входят в массив
Private Sub Text1_Change(Index As Integer)
    'вызываем функцию подсчета, и передаем ей число текстовых полей
   sred_ball Text1.Count
End Sub

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог