2015-10-13 2 views
0

Итак, у меня есть вопрос относительно программы, которую я построил. Во-первых, мой учебник не является хорошим ресурсом. Во-вторых, у меня все сделано, «я думаю», за исключением того, что общая стоимость перетекает в правильный ярлык. Так что в основном у меня две формы, первая - моя информация, а вторая - то, где вы выбираете, что хотите посетить на конференции. Все работает, когда я запускаю это, за исключением того, что сумма не пересекает форму опций в основную форму. Я нахожусь на своем пути. Какие-либо предложения?Visual Studio Multi Forms

Главная форма Код:

Public Class MainForm 

    Private Sub selectButton_Click(sender As Object, e As EventArgs) Handles selectButton.Click 
     ' Create an instance of the Conference options form 
     Dim frmOptions As New Conference_Options 

     ' Display the form 
     frmOptions.ShowDialog() 
    End Sub 

    Private Sub exitButton_Click(sender As Object, e As EventArgs) Handles exitButton.Click 
     ' Close the form 
     Me.Close() 
    End Sub 

    Private Sub resetButton_Click(sender As Object, e As EventArgs) Handles resetButton.Click 
     ' Clear everything 
     nameTextBox.Clear() 
     companyTextBox.Clear() 
     addressTextBox.Clear() 
     cityTextBox.Clear() 
     stateTextBox.Clear() 
     zipTextBox.Clear() 
     phoneTextBox.Clear() 
     emailTextBox.Clear() 
     totalLabel.Text = "" 
    End Sub 
    End Class 

Варианты формы Код:

Public Class Conference_Options 

    Function TotalCost(ByRef dblTotalCost) 
     Dim dblRegistration As Double 
     Dim dblDinnerandReg As Double 
     Dim dblPreCon As Double 

     'conference registration 
     If registrationCheckBox.Checked = True Then 
      dblRegistration = 895 
     Else 
      dblRegistration = 0 
     End If 

     'dinner and keynote speech 
     If dinnerCheckBox.Checked = True Then 
      dblDinnerandReg = 30 
     Else 
      dblDinnerandReg = 0 
     End If 

     'optional preconference workshop 
     If preconferenceListBox.SelectedIndex = 0 Then 
      dblPreCon = 295 
     ElseIf preconferenceListBox.SelectedIndex = 1 Then 
      dblPreCon = 295 
     ElseIf preconferenceListBox.SelectedIndex = 2 Then 
      dblPreCon = 395 
     ElseIf preconferenceListBox.SelectedIndex = 3 Then 
      dblPreCon = 395 
     ElseIf preconferenceListBox.SelectedIndex = -1 Then 
      dblPreCon = 0 
     End If 
     dblTotalCost = dblRegistration + dblDinnerandReg + dblPreCon 
     Return dblTotalCost 

    End Function 
    Private Sub closeButton_Click(sender As Object, e As EventArgs) Handles closeButton.Click 

     ' Close the form 
     Me.Close() 
    End Sub 

    Private Function totalLabel() As Object 
     Throw New NotImplementedException 
    End Function 
    End Class 

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

+1

Вы пытались разоблачить TotalCost как общедоступное свойство (установить его значение из функции) в форме «Параметры» и вызвать его как: 'frmOptions.TotalCost', так как вы уже имеете экземпляр его в Основной форме? –

ответ

0

Обычно этот вид проблемы обрабатывается формой, имеющей две кнопки, одну с надписью «Подтвердить» и свойство DialogResult, установленное на DialogResult.OK, а другое с надписью «Отмена» и с свойством DialogResult, установленным на DialogResult. Отменить

Теперь, когда ваш пользователь нажимает на кнопку Confirm можно выполнить код в функции TotalCost но сохранить результат в глобальном свойстве вашей формы

Что-то вроде этого

Dim totalCost as Decimal 
Public Readonly Property TotalCost as Decimal 
    Get 
      Return totalCost 
    End Get 
End Property 

Private Sub confirmButton_Click(sender As Object, e As EventArgs) Handles confirmButton.Click 

    totalCost = CalcTotalCost() 

End Sub 

Private Function CalcTotalCost() as Decimal 

    ' This is your previous function TotalCost renamed to 
    ' avoid conflicts with the property (and now it is private) 

    Dim decRegistration As Decimal 
    Dim decDinnerandReg As Decimal 
    Dim decPreCon As Decimal 

    'conference registration 
    If registrationCheckBox.Checked = True Then 
     decRegistration = 895 
    Else 
     decRegistration = 0 
    End If 

    'dinner and keynote speech 
    If dinnerCheckBox.Checked = True Then 
     decDinnerandReg = 30 
    Else 
     decDinnerandReg = 0 
    End If 

    'optional preconference workshop 
    If preconferenceListBox.SelectedIndex = 0 Then 
     decPreCon = 295 
    ElseIf preconferenceListBox.SelectedIndex = 1 Then 
     decPreCon = 295 
    ElseIf preconferenceListBox.SelectedIndex = 2 Then 
     decPreCon = 395 
    ElseIf preconferenceListBox.SelectedIndex = 3 Then 
     decPreCon = 395 
    ElseIf preconferenceListBox.SelectedIndex = -1 Then 
     decPreCon = 0 
    End If 

    Return decRegistration + decDinnerandReg + decPreCon 
End Function 

сейчас вы могли бы назвать своим frmOptions таким образом и получить обратно Значение

Public Class MainForm 

    Private Sub selectButton_Click(sender As Object, e As EventArgs) Handles selectButton.Click 
     ' Create an instance of the Conference options form 
     Using frmOptions = New Conference_Options 
      ' Display the form and check if the user confirms 
      DialogResult result = frmOptions.ShowDialog() 
      If result = DialogResult.OK Then 
       ' Read the value calculated in the Confirm event handler 
       Dim total = frmOptions.TotalCost 
      End If 
     End Using ' Closing and destroying the options form 
    End Sub 

Обратите внимание, что я изменил свои переменные из Double в десятичные, потому что это более целесообразно использовать этот тип при работе с денежными значениями.

Смежные вопросы