Member 10439491 Ответов: 3

Как Я Могу Сократить Свой Код


Привет, я писал код для личного проекта, и теперь все работает именно так, как я хочу, без каких-либо ошибок!

Дело в том что я очень новичок в кодировании и код очень длинный с одним и тем же кодом копируемым снова и снова

Private Sub Plus1_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Plus1.ClickButtonArea
        Dim ask As String
        If TextBox1.Visible = False Then
            ask = InputBox("Enter Income Name")
            If ask.Length <> 0 Then
                TextBox1.Visible = True
                Label1.Visible = True
                Label1.Text = ask
                Plus1.Visible = False
                Negative1.Visible = True
            Else
                Exit Sub
            End If
        End If
    End Sub

    Private Sub Plus2_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Plus2.ClickButtonArea
        Dim ask As String
        If TextBox2.Visible = False Then
            ask = InputBox("Enter Income Name")
            If ask.Length <> 0 Then
                TextBox2.Visible = True
                Label2.Visible = True
                Label2.Text = ask
                Plus2.Visible = False
                Negative2.Visible = True
            Else
                Exit Sub
            End If
        End If
    End Sub

................................

Private Sub Plus26_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Plus26.ClickButtonArea
        Dim ask As String
        If TextBox26.Visible = False Then
            ask = InputBox("Enter Income Name")
            If ask.Length <> 0 Then
                TextBox26.Visible = True
                Label26.Visible = True
                Label26.Text = ask
                Plus26.Visible = False
                Negative26.Visible = True
            Else
                Exit Sub
            End If
        End If
    End Sub


Как вы можете видеть, есть 26 кнопок, и один и тот же код повторяется для каждой кнопки. Есть ли способ сделать это короче

а также

Private Sub Add_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles AddRemove.ClickButtonArea
        WorkItOut.Visible = False
        AddRemove.Visible = False
        Rename.Visible = False
        Done.Visible = True
        Panel1.Visible = True
        Panel2.Visible = True

        If TextBox1.Visible = False Then

            Plus1.Visible = True
        Else
            Negative1.Visible = True
        End If
        If TextBox2.Visible = False Then

            Plus2.Visible = True
        Else
            Negative2.Visible = True
        End If
        If TextBox3.Visible = False Then.................


Что же до 26

Я пробовал так много разных вещей и потерпел неудачу, что думаю, что пришло время спросить, так как я уверен, что на этот вопрос есть действительно простой ответ.

Спасибо

TnTinMn

Сохраняет ли каждая группа кнопок, текстовых полей и меток одинаковое относительное положение по отношению друг к другу? Если это так, подумайте о создании UserControl, содержащего каждый из этих элементов, и запишите свою логику один раз в этот UserControl. Затем вы можете добавить этот UserControl в свою форму, и все они будут вести себя в соответствии с одной и той же логикой.

Member 10439491

как мне это сделать?

Aravindba

попробуйте использовать для каждого оператора,например dim i как целое число=от 1 до 26,а также использовать i для добавления в текстовое поле и метку,положительную и отрицательную также.используйте функцию dosomething и передайте параметр со значением append i

3 Ответов

Рейтинг:
23

Matt T Heffron

Немного расширяя решение Мацея:
(Я догадываюсь о типах plus и negative.)

Private Sub DoSomething(textBox as TextBox, label as Label, plus as Button, negative as Button)
        Dim ask As String, bRetVal As Boolean
        If textBox.Visible Then Exit Sub
        ask = InputBox("Enter Income Name")
        bRetVal = (ask.Length > 0) 
        textBox.Visible = bRetVal
        label.Visible = bRetVal
        label.Text = ask
        plus.Visible = bRetVal
        negative.Visible = bRetVal
End Sub

После этого позвоните ему:
Private Sub Plus1_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Plus1.ClickButtonArea
    DoSomething(TextBox1, Label1, Plus1, Negative1)
    End Sub

Звоните же DoSomething метод с разными аргументами для каждого случая.


Maciej Los

Неплохая альтернатива ;)
+5!

Member 10439491

Ага, это сработает. я попробую это сделать спасибо всем

Matt T Heffron

Отличный.
Обратите внимание, что я только что исправил ошибку в присвоении label.Text

Member 10439491

Да, я заметил это после того, как попробовал его, и мой ярлык был назван "истинным", а не тем, что было в моем входном ящике :)

Member 10439491

О, а Plus1 и negative1-это CButtonLib.Cbutton, так что мне нужно попробовать сделать плюс.Видно = bRetVal и отрицательные.Видно = bRetVal работы

Member 10439491

ответил на мой собственный вопрос, плюс как cbuttonlib.cbutton

Рейтинг:
2

Maciej Los

Эта часть кода:

Dim ask As String
        If TextBox1.Visible = False Then
            ask = InputBox("Enter Income Name")
            If ask.Length <> 0 Then
                TextBox1.Visible = True
                Label1.Visible = True
                Label1.Text = ask
                Plus1.Visible = False
                Negative1.Visible = True
            Else
                Exit Sub
            End If
        End If


перейти к другой процедуре/функции, например:
Private Sub DoSomething()
        Dim ask As String, bRetVal As Boolean
        If TextBox1.Visible Then Exit Sub
        ask = InputBox("Enter Income Name")
        bRetVal = (ask.Length > 0) 
        TextBox1.Visible = bRetVal
        Label1.Visible = bRetVal
        Label1.Text = bRetVal
        Plus1.Visible = bRetVal
        Negative1.Visible = bRetVal
End Sub


После этого позвоните ему:
Private Sub Plus1_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Plus1.ClickButtonArea
    DoSomething()
    End Sub


Примечание: пожалуйста, взгляните на DoSomething() процедура. Видите ли вы разницу между вашим и моим кодом?


CHill60

Привет, Мацей Лос... хороший ответ ... но я думаю, что вы забыли передать управление в субподряд DoSomething (). Я думаю, что операция может нуждаться в этом дополнительном толчке

Maciej Los

Спасибо, остынь ;)
Нет, я не забыл. Загляните внутрь процедуры DoSomething... ;)

CHill60

д'о... снова попался на эту старую игру Правда/ложь *хлопает по голове*

Maciej Los

;)

Member 10439491

Я вижу разницу, но разве это не будет работать только для textbox1 и все равно придется писать тот же код для textbox2 и 3 и так далее?

Aravindba

хай, какое событие щелчка происходит первым ? Plus1_ClickButtonArea или Add_ClickButtonArea ?

Member 10439491

Ну, Add_ClickButtonArea - это одна кнопка на моей форме, которая делает видимыми 26 маленьких кнопок добавления. если текстовое поле рядом с этой кнопкой +видно, то кнопка-становится видимой рядом с ней, а кнопка +невидимой. если это имеет смысл.
Plus1_ClickButtonArea предназначен для каждой из 26 маленьких кнопок

Рейтинг:
2

TnTinMn

Цитата:

Сохраняет ли каждая группа кнопок, текстовых полей и меток одинаковое относительное положение по отношению друг к другу? Если это так, подумайте о создании UserControl, содержащего каждый из этих элементов, и запишите свою логику один раз в этот UserControl. Затем вы можете добавить этот UserControl в свою форму, и все они будут вести себя в соответствии с одной и той же логикой.
TnTinMn - 17 часов назад
Ответить
[Изменить комментарий.] [Удалить комментарий.]
как мне это сделать?
Член 10439491 - 7 минут назад
Ответить
Раз уж вы спросили, я представлю вам альтернативное решение.
1. Выберите пункт "Добавить UserControl" в меню "проект" (File - Edit - View - Project -...) в верхней части VS IDE.
2. Вы можете добавлять элементы управления из панели инструментов аналогично тому, как вы добавляете их в форму.
3. Вы также можете добавить код позади так же, как с формой.
4. после того как вы внесли изменения в свой UserControl, "постройте" проект, щелкнув правой кнопкой мыши на проекте в окне "Обозреватель решений" и выбрав пункт "построить".
5. вернитесь к проектному виду вашей формы. UserControl должен присутствовать в вашем наборе инструментов вверху под вкладкой "компоненты YourProjectName". Теперь вы можете добавить его в свою форму.


Member 10439491

Это кажется хорошей идеей но я думаю что мне придется использовать ее в следующий раз или мне придется переделать свою форму я думаю