Простейший конвертор.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Fefo
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 04.10.2008 (Сб) 12:59

Простейший конвертор.

Сообщение Fefo » 04.10.2008 (Сб) 13:20

Доброго времени суток.

Появилась нужда в конверторе. Имеем 3 переменных:
A = 3.05 * B
B = A / 3.05
C = A * 2

Создал 3 TextBox'a (Atxt, Btxt, Ctxt) и кнопку :)
Вводим в одно из текстовых полей число, жмем кнопку - вычисляются две остальные переменные. Всё просто.
Но, для такой простой операции, код получился длинноват, возможно ли его упростить? Тем более, что позже будет не 3, а 12-15 переменных.

Код: Выделить всё
    Private Sub GOGO()
        If Val(Atxt.Text) > 0 Then
            Btxt.Text = Val(Atxt.Text) / 3.05
            Ctxt.Text = Val(Atxt.Text) * 2
            Exit Sub
        End If

        If Val(Btxt.Text) > 0 Then
            Atxt.Text = Val(Btxt.Text) * 3.05
            Ctxt.Text = Val(Atxt.Text) * 2
            Exit Sub
        End If

        If Val(Ctxt.Text) > 0 Then
            Atxt.Text = Val(Ctxt.Text) / 2
            Btxt.Text = Val(Atxt.Text) / 3.05
            Exit Sub
        End If
    End Sub


Можно ли его упростить?

Спасибо!

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Простейший конвертор.

Сообщение Debugger » 04.10.2008 (Сб) 18:38

Код: Выделить всё
Private Sub GOGO()
    If Val(atxt) > 0 Then   '.Text можно не указывать. Также можно и без Val`а. Тут и везде
        btxt.Text = Val(atxt.Text) / 3.05
        ctxt.Text = Val(atxt.Text) * 2
    Else
        If Val(btxt) > 0 Then
            atxt.Text = Val(btxt.Text) * 3.05
            ctxt.Text = Val(atxt.Text) * 2
        ElseIf Val(ctxt) > 0 Then
            atxt.Text = Val(ctxt.Text) / 2
            btxt.Text = Val(atxt.Text) / 3.05
        End If
    End If
End Sub

А если переменных будет много - почему бы их не запихать в массив? Гемора меньше, как и кода.

Fefo
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 04.10.2008 (Сб) 12:59

Re: Простейший конвертор.

Сообщение Fefo » 05.10.2008 (Вс) 9:56

Спасибо.
Про массив думал, но как в данном случае он поможет??

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Простейший конвертор.

Сообщение Debugger » 05.10.2008 (Вс) 12:11

Занести все контроллы в массив (то бишь просто Ctrl+C, Ctrl+V, на вопрос ответить утвердительно), обходить их циклом. В твоем случае, где некторые текстбоксы надо делить, а некторые умножать, подойдет еще и булевый массив (если нету алгоритма распределения умножения-деления). Простенький набросок (10 текстбоксов)
Код: Выделить всё
Dim b(9) As Boolean
Private Sub Check()
    Dim c As Integer
    Dim c2 As Integer
    For c = 0 To 9  'Кол-во текстбоксов - 1
        If Val(txt(c)) > 0 Then
            For c2 = 0 To 9
                If c <> c2 Then 'Если текущий текстбокс не равен подобранному
                    If b(c) = True Then  'Массив булевых b должен быть заполнен соответственно
                        txt(c2) = txt(c) / 2
                    Else
                        txt(c2) = txt(c) * 2
                    End If
                End If
            Next
            Exit Sub    'Или мой любимый GoTo, если после Next двумя строчками ниже будет еще что-то стоять
        End If
    Next
End Sub

Код страшнющий (на 4 строчки больше твоего первоначального), но универсальный

Fefo
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 04.10.2008 (Сб) 12:59

Re: Простейший конвертор.

Сообщение Fefo » 06.10.2008 (Пн) 3:01

Спасибо!

А у меня массив текстбоксов не создаётся простым копированием. Приходится программно создавать. (у меня VS 2005).

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Простейший конвертор.

Сообщение Viper » 06.10.2008 (Пн) 7:26

Debugger, не забывай, что ты отвечаешь в разделе VB.NET. Здесь нет массивов элементов управления (вернее они есть, но элементы в них добавляются не через Ctrl+C, Ctrl+V) и нет свойство по умолчанию.
Весь мир матрица, а мы в нем потоки байтов!

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Простейший конвертор.

Сообщение Debugger » 06.10.2008 (Пн) 14:50

:oops: Извиняюсь. Форумом промазал.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList