Visual Basic: создание нескольких форм для заказа - PullRequest
0 голосов
/ 31 марта 2012

Я работаю над этим проектом уже две недели, и я истощен от всех икок, с которыми я столкнулся. Теперь я врезался в кирпичную стену.

Я делаю «простую» форму заказа в Visual Basic 2010, которая рассчитывает сумму, подлежащую оплате за заказ, а затем по сумме определяет, какой будет доставка. Я смог выполнить следующие задачи:

  1. принять данные клиента (имя, адрес, город, штат, почтовый индекс)
  2. Рассчитать общую стоимость доставки (точно, по большей части)
  3. очистить форму заказа и выйти

Но, как я понимаю, клиент может указать только одну форму заказа.

Проблема: Мне нужно найти способ, позволяющий клиенту разместить форму заказа для нескольких товаров. (Я предполагаю, что клиент не будет размещать заказ более 20 наименований). Итак, как лучше всего сохранить информацию для нескольких элементов, а затем рассчитать стоимость в конце?

Если это создание нескольких форм, как это делается? Ключевое слово "Контейнер" - путь и как? В конце концов, я просто не знаю, как создать эту форму из нескольких элементов (это похоже на базу данных в Visual Basic), поэтому любой метод, по крайней мере, направляющий меня в правильном направлении, будет полезен.

(Пытался опубликовать изображение моей работы, но я новичок здесь - пока не могу опубликовать изображения. Я разместил немного своего кода ниже - код работает для 1 заказа)

Код фрагмента:

Private Sub total_mouseleave(ByVal sender As Object, ByVal e As EventArgs) Handles total.MouseLeave

  Dim gs_1 As Decimal = 4.95
  Dim gs_2 As Decimal = 6.95
  Dim gs_3 As Decimal = 8.95
  Dim gs_4 As Decimal = 10.95
  Dim gs_5 As Decimal = 12.95
  Dim ex_1 As Decimal = 14.95
  Dim ex_2 As Decimal = 16.95
  Dim ex_3 As Decimal = 18.95
  Dim ex_4 As Decimal = 20.95
  Dim ex_5 As Decimal = 22.95
  Dim totalcost As Decimal

  totalcost = Convert.ToDecimal(total.Text)

  If gs_radiobutton.Checked Then
    If (totalcost < 1) Then
      total.Text = Val(0)
      shipping.Text = Val(0)
    ElseIf (1 < totalcost AndAlso totalcost < 15) Then
      total.Text = Val(totalcost + gs_1)
      shipping.Text = ground_1
    ElseIf (15 < totalcost AndAlso totalcost <= 49.99) Then
      total.Text = totalcost + gs_2
      shipping.Text = gs_2
    ElseIf (50 < totalcost AndAlso totalcost <= 99.99) Then
      total.Text = totalcost + g_3
      shipping.Text = gs_3
    ElseIf (100 < totalcost AndAlso totalcost <= 199.99) Then
      total.Text = totalcost + gs_4
      shipping.Text = gs_4
    Else
      total.Text = totalcost + gs_5
      shipping.Text = gs_5
    End If
  End If

  '// . . . . 

End Sub

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Из вашего поста не ясно, имеете ли вы в виду формы заказов, как в объекте Form в VB, или заказ, размещенный пользователем.

Если вы имели в виду заказы, размещенные пользователем, то было бы проще использоватьодну форму, но создайте несколько пользовательских классов для хранения всех деталей строки заказа:

' Class used for each order line
Public Class orderline

   Public Value As Decimal
   Public StockID As Integer
   Public Qty As Integer

End Class

' Class used to store the entire order
Public Class Order

   ' List of orderlines (similar to an array)
   Public OrderLines As List(Of orderline)

   Private _totalcost As Decimal

   Public ReadOnly Property TotalCost As Decimal

       Get
           Dim t As Decimal

           For Each l In OrderLines
               t = t + (l.Value * l.Qty)
           Next

           Return t

       End Get

   End Property

End Class

Затем в форме вы можете использовать классы, как показано ниже:

Public Class Form1

    Dim ord1 As New Order

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        TextBox1.Text = ord1.TotalCost

    End Sub
End Class

Затем вы можетесоздать более одного заказа, сохраненного в форме, используя список:

Dim CustomerOrders as List<Of Order>
0 голосов
/ 31 марта 2012

Вы должны иметь возможность создавать несколько экземпляров формы и показывать их морально. Является ли это лучшим дизайном - другое обсуждение. Немодальные формы все будут видимы и могут «принадлежать» основной форме.

Попробуйте что-то вроде этого:

Dim firstInstance As New YourForm()
Dim secondInstance As New YourForm()

firstInstance.Show() 'Not ShowDialog()
secondInstance.Show(myParent) 'Optional parent form parameter

Вам нужно будет следить за областью действия ваших экземпляров форм, так как формы будут закрыты, если переменные выходят из области видимости.

Возможно, это не окончательное решение, но вы можете попробовать найти оптимальный подход.

С учетом последнего комментария:

Проблема не ясна. Хотите создать несколько форм, по одной форме на заказ? Или вы хотите одну форму, которая может показывать несколько заказов?

Мое решение позволит вам показывать несколько форм, в то время как другой опубликованный ответ предлагает изящное решение для создания одной формы с несколькими заказами.

Лично я бы создал одну форму, которая показывает несколько заказов, возможно, ListView, которая обеспечивает некоторый способ просмотра / редактирования деталей каждого заказа и затем позволяет отправлять заказы в пакете. Это сложнее, но будет более удобным, ИМХО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...