2015-12-23 4 views
0

Я пишу программу, которая имеет две формы. Одна форма позволяет пользователю вводить несколько значений, а затем выполняет некоторые вычисления. Затем он передает эту информацию в другую форму. Однако я не могу понять, как это сделать. Вот важная часть моего кода. Чтобы вызвать некоторую путаницу, я пытаюсь передать 11 значений, также изначально форма 2 не показана, а затем, когда значения передаются из формы 1 в форму 2, форма 1 уходит, а форма 2 - единственная, которая показанаПередача целочисленного значения из одной формы в другую в VB.NET

ПРИМЕЧАНИЕ: Это не весь мой код, я не верю, что весь мой код требуется (у меня есть 1000 строк прямо сейчас). Однако это код с информацией, которую я хочу передать другой форме.

Многие люди, по-видимому, говорят, что это дубликат другого вопроса, однако этот вопрос, похоже, уже знает, как передавать переменные, но имеет проблемы с ним (и даже глядя на него, я не могу понять это)

Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click 
    'declarations 
    Dim intNormal As Integer 
    Dim intChildren As Integer 
    Dim intBonanza As Integer 
    Dim intDiamond As Integer 
    Dim intPictureFrame As Integer 
    Dim intKite As Integer 
    Dim intCrazyT As Integer 
    Dim intLetterX As Integer 
    Dim int2PostageStamp As Integer 
    Dim intPick7 As Integer 
    Dim intJackpot As Integer 

    Validate() 
    If txtNormal1.Enabled = False Then 
     intNormal = intNormInput 
    Else 
     intNormal = CalcNormalBooks() 
    End If 
    If txtChildren1.Enabled = False Then 
     intChildren = intChildInput 
    Else 
     intChildren = calcChildrensBooks() 
    End If 
    If txtBonanza1.Enabled = False Then 
     intBonanza = intBonInput 
    Else 
     intBonanza = calcBonanza() 
    End If 
    If txtSpecial1.Enabled = False Then 
     intSpecial = intSpeInput 
    Else 
     intSpecial = calcSpecialBooks(intSpecial) 
    End If 
    If txtDiamond1.Enabled = False Then 
     intDiamond = intDiaInput 
    Else 
     intDiamond = calcDiamond(intSpecial) 
    End If 
    If txtPictureFrame1.Enabled = False Then 
     intPictureFrame = intPicInput 
    Else 
     intPictureFrame = calcPictureFrame(intSpecial) 
    End If 
    If txtKite1.Enabled = False Then 
     intKite = intKiteInput 
    Else 
     intKite = calcKite(intSpecial) 
    End If 
    If txtCrazyT1.Enabled = False Then 
     intCrazyT = intCrazyInput 
    Else 
     intCrazyT = calcCrazyT(intSpecial) 
    End If 
    If txtLetterX1.Enabled = False Then 
     intLetterX = intLettInput 
    Else 
     intLetterX = calcLetterX(intSpecial) 
    End If 
    If txt2PostageStamp1.Enabled = False Then 
     int2PostageStamp = intPostInput 
    Else 
     int2PostageStamp = CalcPostageStamp(intSpecial) 
    End If 
    If txtPick71.Enabled = False Then 
     intPick7 = intPickInput 
    Else 
     intPick7 = calcPick7(intSpecial) 
    End If 
    If txtJackpot1.Enabled = False Then 
     intJackpot = intJackInput 
    Else 
     intJackpot = calcJackpot() 
    End If 
End Sub 
+0

Возможный дубликат [Значение переменной Переход к другой форме, VB.Net] (http://stackoverflow.com/questions/14427695/variable-value-passing-to-another-form-vb-net) – Jeroen

+0

Сколько значения, которые вы хотите передать из одной формы в другую? Открываются ли обе формы в одно и то же время или что? –

ответ

0

Поскольку я был почти такой же requiremnt в последнее время здесь мое решение:

  1. Пользовательское событие, которое срабатывает, когда ваша вторая форма закрывается

    Public Event HotKeyFormClosed As EventHandler(Of HotKeyFormClosedEventArgs) 
    
  2. пользовательских EventArgs класс, где вы храните свои значения, которые вы хотите передать в главную форму

    Public Class HotKeyFormClosedEventArgs 
    Inherits EventArgs 
    
    'Your properties here 
    
    Public Sub New(...) 'your params here 
        MyBase.New() 
        'set your properties here 
    End Sub 
    End Class 
    
  3. На 2-й форме ручки FormClosed события и передать свои значения EventArgs

    Private Sub HotKey_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) 
        RaiseEvent HotKeyFormClosed(Me, New HotKeyFormClosedEventArgs(...)) 'your params here 
    End Sub 
    
  4. На Основная форма обрабатывает ваше пользовательское событие (здесь HotKeyFormClosed) и извлекает его значения

    AddHandler frmHotKey.HotKeyFormClosed, AddressOf HotKey_FormClosed; 
    ... 
    Private Sub HotKey_FormClosed(sender As Object, e As HotKeyFormClosedEventArgs) 
        'Do stuff with values from e 
    End If 
    

Я выбрал подход «Событие», поскольку он отделяет две формы от другой. Можно легко дублировать информацию обо всех формах, сделать их общедоступными и получить к ней доступ непосредственно через экземпляр объекта. Но мне нравится наблюдаемый подход из событий, более связанных с ним, дает большую гибкость (дополнительные формы с использованием тех же событий и т. Д.)

P.S .: Я написал свой код в C#, и слепой ввел код VB здесь, так что будьте любезны.

+0

поэтому, когда вы помещаете комментарии «Ваши парамы здесь», вы имеете в виду переменные, которые мне нужно передать? Нам еще не учили термин «Параметры в классе» –

+0

Да, параметры - это переменные, переданные методу. Если вы не указали в своем вопросе, какие переменные вы хотите передать, я написал общий ответ. –

0

Значения/переменные, которые метод ожидает получать (указанные в сигнатуре метода), называются параметрами.

Значения, отправленные методу при вызове метода, называются аргументами.

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

Например (и я попытаюсь применить это к вашему контексту), если вы хотите создать экземпляр формы, которая принимает определенные значения, вы можете указать эти параметры в новом событии формы, например:

Public Sub New(someInt As Integer) 
    'do something with someInt here 
End Sub 

Тогда при вызове этого метода вы бы передать ему аргументы, например так:

Dim myInt As Integer = 10 
Dim newForm As myForm = New myForm(myInt) 

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

Пока это так, то он должен на самом деле не важно, как вы передаете это - вы могли бы пройти 11 отдельных аргументов, вы просто должны убедиться, что вы соответствие аргумент параметра.

Надеюсь, что это поможет!

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