2015-11-15 2 views
-1

Я новичок в визуальной базовой, так что, надеюсь, это простой вопрос. У меня есть меню с кнопками для вызова разных форм. Формы разработаны и имеют метки, текстовые поля и кнопки и т. Д. Из главного меню я попытался вызывать формы двумя разными способами. Один из способов формы открыть и выглядеть правильно и функционировать. Другой способ: форма открывается как маленький пустой квадрат без полей. В конечном счете, я хочу создать набор объектов List, когда открывается главное меню, и передавать их обратно и обратно в другие формы для ввода и обработки. Я использую параллельные списки как временную базу данных для простой школьной лаборатории. Я просто не вижу, что не так, как я называю форму. Я даже не беспокоился о том, чтобы передать объекты List должным образом.Visual Basic/visual studio 2010 windows form load blank

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» в главном меню загрузит форму правильно, но я должен прокомментировать новую подпрограмму в формах или произошла ошибка.

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», затем в окне «Код» выберите объект формы в левой части окна вниз, затем в правом раскрывающемся списке выберите «Создать». Обратите внимание на приведенные там предупреждения дизайнера. Я бы на самом деле добавил метод AddData (или набор реквизитов) и передал материал таким образом, а не в ctor в этом случае. – Plutonix

+0

Добавьте InitializeComponents() в класс конструктора. –

ответ

0

Добавить InitializeComponent() в класс конструктора.
Это добавляется по умолчанию к функции New (constructor) всех форм Visual Basic. Он требует, чтобы он настраивал компоненты пользовательского интерфейса в форме.

+0

Я не могу поверить, что все было так просто. Не могу поверить, что я уже не нашел ответа. Спасибо! –

+0

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

+0

Моя репутация слишком низкая, чтобы увеличить общий балл :( –