zoormoor Ответов: 1

Vb-2005 Как обрабатывать текстовые поля через цикл, используя их имена и индекс?


Suppose: Winform Contains following textboxes...

txtPrice01
txtPrice02
txtPrice03
txtPrice04
txtPrice05
....
....
txtPrice60


txtQty01
txtQty02
txtQty03
txtQty04
txtQty05
....
....
txtQty60


Что я уже пробовал:

I am using following code...which did not work as required....


 Dim ItemID As Integer() = {0, 1, 2, 61, 3, 62, 14, 13, 63, 12, 11, 64, 18, 16, 15, 65, 8, 66, 9, 10, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60}
 Dim n as string 

 For i As Integer = 1 To 60
        If i < 10 Then n = "0" + i.ToString() Else n = i.ToString()

        txtQty = DirectCast("txtQty" + n, TextBox)
        txtPrice = DirectCast("txtPrice" + n, TextBox)

        txtQty.Clear()
        txtPrice.Text = ITM.PriceSalesSP(ItemID(i))
 Next

Richard MacCutchan

120 текстовых полей в одной форме?

1 Ответов

Рейтинг:
1

Michael_Davies

Создайте массив текстового поля для двух типов полей, которые вы используете, назначьте элементы управления формой массиву и готово.

Чтобы получить индекс элемента управления, вы можете подстроить и разобрать последние две цифры имени или поместить индекс в поле тега элемента управления (требуется немного больше работы).

Dim Quantities(61) as TextBox
Dim Prices(61) As TextBox

For Each ctrl As Control in Me.Controls
  If ctrl.Name.StartsWith("txtQty") = True Then
     Dim idx as Integer

     idx = Integer.Parse(ctrl.Name.Substring(ctrl.Name.Length - 2))

     Quantities(idx) = ctrl
   end if
'
' Do the same for Prices
'
Next


Или с помощью метода тегов;

For Each ctrl As Control in Me.Controls
  If ctrl.Name.StartsWith("txtQty") = True Then
     Quantities(ctrl.Tag) = ctrl
   end if
Next


Если вы помещаете элементы управления в контейнер, чтобы держать их вместе, то вам нужно только перебирать элементы управления контейнерами, а не всю форму, если вы скачиваете форму и у вас есть элементы управления контейнерами, которые вы хотите также искать, вам нужно перебирать контейнеры отдельно .HasChildren = True указывает, что это контейнер с дочерними элементами управления.


Теперь ваш набор Вы просто используете массивы текстовых полей для выполнения ваших вычислений и манипуляций с элементами управления;

For i As Integer = 1 To 60
       Quantities(i).Clear()
       Prices(i).Text = ITM.PriceSalesSP(ItemID(i))
Next