Сначала включите Option Strict.Вы можете найти этот параметр в Меню инструментов -> Параметры -> Проекты и решения -> VB по умолчанию.Это избавит вас от ошибок во время выполнения.
Function CheckData(Stock As Object, txtSku As TextBox, product() As Object, txtName As TextBox)
Stock As Object
Неправильно называть вашу переменную тем же именем, что и ваша структура.Шаблон для параметров - это имя переменной как DataType.Ваша структура общедоступна, поэтому ее можно увидеть любым методом.Старайтесь держаться подальше от объекта как типа данных.Вы никогда не используете переменную Stock в своей функции, поэтому она не нужна.Помните, что Stock является локальной переменной.Это не имеет никакого отношения к Структуре, называемой Запасом.Тип объекта.
txtSku As TextBox
Кажется, что txtSku
- это TextBox
в вашей форме.Нет необходимости передавать это вашей функции, потому что функция может обращаться к ней напрямую.
product() As Object
product()
- переменная уровня формы, которая, таким образом, видима для всех методов формы.Это не нужно.
txtName As TextBox
То же, что №2 - Ненужно
Function
требуется DataType
Закрытая функция CheckData () As Boolean
и Возврат в теле функции
Return True
Это не обязательно должен быть Boolean
, может быть любой тип.Это был просто пример.Поскольку ничего не возвращается, процедура должна быть Sub
.
Dim product(300) As Stock
объявляет массив с 301 элементом с индексами от 0 до 300. В массивах vb.net объявляется продукт (UBound) или верхняя граница.Это резервирует некоторую память для 301 структуры акций.Возможно, было бы лучше использовать List (Of T) T обозначает тип.Итак, ваш список будет
Dim product as New List(Of Stock)
Таким образом, вам не нужно беспокоиться о том, сколько предметов вы поместите в свой список.
Теперь в вашем btnSave_Click
Создайте новый экземпляр Stock
Dim stck в качестве нового запаса
Установите некоторые свойства
stck.prodSku = txtSKU.Text
Добавить в список продуктов
product.Add(stck)
повторно использовать ту же переменную, установив ее для нового экземпляра Stock
stck = New Stock
stck.prodSKU = "af"
procuct.Add(stck)
Не нужно использовать ключевое слово Call
вэто и большинство обстоятельств.
CheckData()
Вернуться к телу Sub CheckData (), новой функции.Смотрите в строке комментарии и объяснения.
Public Structure Stock
Dim prodSKU As String
Dim sizeAmt As Integer
Dim prodName As String
Dim category As String
Dim sellPrice As Decimal
Dim buyPrice As Decimal
End Structure
'A plural name helps identify this as a collection
Private products As New List(Of Stock)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Create a new Stock object
Dim stck As New Stock
stck.prodSKU = txtSKU.Text
'Add the Stock object to the list
products.Add(stck)
stck = New Stock
stck.prodSKU = "af"
products.Add(stck)
End Sub
Private Sub CheckData()
For Each item As Stock In products
'These values will be overwritten on every iteration of the loop
txtSku.Text = item.prodSKU
txtName.Text = item.prodName
'Well this is kind of silly you just set these properties so of course it is true!
'If txtSku.Text = item.prodSKU Or txtName.Text = product(Index).prodName Then
'With Option Strict uninitiated varaibles must have a type
'Dim Msg, Style, Title, Response
'the variable is assigned a value so the compiler now knows the type
Dim Msg = "That SKU/Product Name already exists, enter another" ' Define message.
Dim Title = "Repeated Saved Data" ' Define title
'Since the user can only click OK this loop will only go once
Dim Response As DialogResult = MessageBox.Show(Msg, Title, MessageBoxButtons.OK)
If Response = vbOK Then ' User chose Ok
Exit Sub
End If
Next
End Sub