2015-11-15 58 views
-1

我是新来的visual basic,希望这是一个简单的问题。我有一个按钮来调用不同的窗体菜单。表格被设计并且具有标签和文本字段和按钮等等。从主菜单我尝试过两种不同的方式调用窗体。表单打开并且看起来正确和功能的一种方式。另一种方式是将窗体打开为一个没有字段的小空白方块。最终,我想在主菜单打开时创建一组List对象,并将它们来回传递给其他表单以供输入和处理。我使用并行列表作为简单学校实验室的临时数据库。我只是没有看到我打电话的方式有什么问题。我甚至都没有考虑过如何正确传递List对象。Visual basic/visual studio 2010窗体加载空白

Public Class frmMain 

Dim arrGames As New List(Of String) 
Dim arrDates As New List(Of String) 
Dim arrPrices As New List(Of Decimal) 
Dim arrSeats As New List(Of Integer) 

Private Sub btnEnterGames_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnterGames.Click 
    'NewEnter.Visible = True 
    Dim frmEnter As New NewEnter(arrGames, arrDates, arrPrices, arrSeats) 
    frmEnter.ShowDialog() 
End Sub 

Private Sub btnReports_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReports.Click 
    'Reports.Visible = True 
    Dim frmReports As New Reports(arrGames, arrDates, arrPrices, arrSeats) 
    frmReports.Visible = True 
End Sub 

Private Sub btnSellTickets_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSellTickets.Click 
    'SellTickets.Visible = True 
    Dim frmSell As New SellTickets(arrGames, arrDates, arrPrices, arrSeats) 
    frmSell.Visible = True 
End Sub 

Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click 
    Close() 
End Sub 
End Class 

这是NewEnter形式的代码。我有新的例程接受4个列表,基本上什么都没有做。在主菜单中执行“NewEnter.Visible = True”会正确加载表单,但我必须在表单中注释New子例程或者出现错误。

Public Class NewEnter 

Private _arrGames As List(Of String) 
Private _arrDates As List(Of String) 
Private _arrPrices As List(Of Decimal) 
Private _arrSeats As List(Of Integer) 

Sub New(ByVal arrGames As List(Of String), ByVal arrDates As List(Of String), ByVal arrPrices As List(Of Decimal), ByVal arrSeats As List(Of Integer)) 
    ' TODO: Complete member initialization 
    ' _arrGames = arrGames 
    ' _arrDates = arrDates 
    ' _arrPrices = arrPrices 
    ' _arrSeats = arrSeats 
End Sub 

Private Sub btnSaveGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveGame.Click 

    Dim arrGames As New List(Of String) 
    Dim arrDates As New List(Of String) 
    Dim arrPrices As New List(Of Decimal) 
    Dim arrSeats As New List(Of Integer) 

    Dim strGame As String 
    Dim strPrice As String 
    Dim strSeats As String 
    Dim intSeats As Integer 
    Dim decPrice As Decimal 
    Dim bolGameErr As Boolean 
    Dim bolDateErr As Boolean 
    Dim bolPriceErr As Boolean 
    Dim bolSeatErr As Boolean 

    strGame = txtGame.Text 
    strPrice = txtPrice.Text 
    strSeats = txtSeats.Text 

    '~~~~~~~~~~~~verify a game is entered 
    If String.IsNullOrEmpty(strGame) Or String.IsNullOrWhiteSpace(strGame) Then 
     bolGameErr = True 
    Else 
     '~~~~~~~~~~~~verify price is numeric 
     If IsNumeric(strPrice) Then 
      decPrice = strPrice 
      '~~~~~~~~~~~~~~~verify seats are numeric 
      If IsNumeric(strSeats) Then 
       intSeats = Convert.ToInt32(strSeats) 
       ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ add elements to array lists 
       arrGames.Add(New String(strGame)) 
       arrDates.Add(dtpDate.Text) 
       arrPrices.Add(New Decimal(decPrice)) 
       arrSeats.Add(intSeats) 

       lblSaveSuccessful.Visible = True 
       ClearInput() 
       ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ add elements to array lists 
      Else 
       bolSeatErr = True 
      End If 

     Else 
      bolPriceErr = True 
     End If 
    End If 

    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Check flags for input errors 
    If bolDateErr = True Then 
     lblErr.Text = "Invalid date" 
     lblErr.Visible = True 
    End If 
    If bolGameErr = True Then 
     lblErr.Text = "Must enter a game name" 
     lblErr.Visible = True 
     txtGame.Focus() 
    End If 
    If bolDateErr = True And bolGameErr = True Then 
     lblErr.Text = "Must enter a game name and valid date" 
     lblErr.Visible = True 
     txtGame.Focus() 
    End If 
    If bolPriceErr = True Then 
     lblPriceErr.Visible = True 
     txtPrice.Text = "" 
     txtPrice.Focus() 
    End If 
    If bolSeatErr = True Then 
     lblSeatErr.Visible = True 
     txtSeats.Text = "" 
     txtSeats.Focus() 
    End If 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Check flags for input error 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Display output 
    Dim i As Integer 
    i = 0 

    lblData.Text = arrGames.Count.ToString 
    Do While i < arrGames.Count 
     lblData.Text = Convert.ToString(arrGames(i)) & " on " & Convert.ToString(arrDates(i)) & " Price: " & _ 
      Convert.ToString(arrPrices(i)) & " Available Seats: " & Convert.ToString(arrSeats(i)) 
     i += 1 
    Loop 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Display output 

    lblData.Visible = True 
End Sub 

Private Sub ClearInput() 
    'lblErr.Visible = False 
    'lblPriceErr.Visible = False 
    'lblSeatErr.Visible = False 
    txtGame.Text = "" 
    txtPrice.Text = "" 
    txtSeats.Text = "" 
    txtGame.Focus() 
End Sub 

Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    'Me.Visible = True 
    'Me.BackColor = Color.BurlyWood 
    'Me.ResumeLayout() 
    'Me.Activate() 
    'Me.Focus() 
    'Me.Show() 
    'Me.lblGameHdr.Visible = True 
End Sub 

Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click 
    Close() 
End Sub 
End Class 
+1

它看起来像你创建自己的构造函数,而不是使用一个VS所需要的。没有它,没有控制或表单道具会初始化。删除你的'Sub New',然后在代码窗口中,在左边的下拉列表中选择表单对象,然后在右边的下拉列表中选择New。注意那里列出的设计师警告。在这种情况下,我实际上添加了一个AddData方法(或一组道具),并且在这种情况下将这些东西传递给了ctor。 – Plutonix

+0

将InitializeComponents()添加到您的构造函数类。 –

回答

0

将InitializeComponent()添加到您的构造方法类中。
这是默认添加到所有Visual Basic窗体的New(构造函数)函数。它要求它在表单上设置UI组件。

+0

我简直不敢相信。我无法相信我没有在某个地方找到答案。谢谢! –

+0

如果你可以提出我的答案,那就太棒了,哈哈。我之前犯过同样的错误,所以我知道它有多令人沮丧。 –

+0

我的声望太低,无法增加公众的分数:( –