Cody O'Meara Ответов: 1

Как бы я увеличил номер объекта в конце?


- Привет!

Я сохранил имена текстовых полей по умолчанию до TextBox30. Просто для некоторого пояснения, строка E моего документа excel иногда имеет десятичную дробь, которую я проверяю, если она содержит. Если значение E содержит десятичную дробь, я записываю переменную F рядом с ней в другое текстовое поле, поскольку они мне нужны вместе. Проблема как есть, она перезаписывается, как вы и ожидали.

По мере того как циклы продолжаются, мне нужно настроить имена объектов текстового поля, чтобы увеличить их на 2, чтобы следующие переменные в цикле переходили в другой набор текстовых полей.

Затем эти значения вставляются в базу данных, которая работает правильно. Единственная причина, по которой он должен сначала войти сюда и в текстовые поля, - это то, что пользователь может дважды проверить все, прежде чем вставлять в базу данных. Прямо сейчас данные вводятся вручную в MS GP, так что таким образом он будет вставлять прямые и не придется беспокоиться о ручном вводе.

Вот изображение всех текстовых полей: Скриншот - 7776e19927e097560efbc1c3e3e5aa4e - Gyazo[^]


Я отметил ниже черточками, где это происходит. Вот как это будет выглядеть, когда цикл продолжается.

Поле textbox2
Поля textbox1

Как только все выстроится и цикл запустится он преобразуется в

Textbox4
Textbox3 и

Снова

Textbox6
textbox5

и так до тех пор, пока петля не закончится...

           Do Until exRow = 200




               perChe = worksheet.Range("E" & exRow).Value

               If perChe Is Nothing Then
                   'do nothing
               Else

                   If perChe.Contains(".") Then
                       perChe = perChe * 100
                       Dim vOut As Double = Convert.ToDouble(perChe)
---------              TextBox2 .Text = vOut
---------              TextBox1.Text = worksheet.Range("F" & exRow).Value
                   Else
                       'do nothing
                   End If

               End If

               tbEven = tbEven + 2
               tbOdd = tbOdd + 2
               exRow = exRow + 1


           Loop


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

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

                        tbEven = 2
                        tbOdd = 1

Loop
                        TextBox & tbEven & .Text = vOut
                        TextBox & tbOdd & .Text = worksheet.Range("F" & exRow).Value
                        tbEven = tbEven + 2
                        tbOdd = tbOdd + 2
Loop

1 Ответов

Рейтинг:
10

Dave Kreskowiak

Ты вообще не можешь этого сделать. Всё.NET-это компилируемый язык, то есть эти имена технически больше не будут существовать, когда ваш код будет запущен.

Как правило, интерпретируемые языки позволяют вам это делать, но не компилируются.

Если вы хотите использовать имя для ссылки на элемент управления, вы можете добавить элементы управления в словарь<string, control="">, там "string" будет именем элемента управления, а элемент управления будет экземпляром элемента управления, с которым вы хотите его связать. Это должно быть сделано в коде. Вы не можете настроить это в конструкторе.

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

Лучшим вариантом было бы отказаться от подхода отдельного текстового поля и перейти к DataGridView для отображения данных.


Cody O'Meara

Спасибо за ваш ответ, Дэйв! На самом деле я действительно пошел с DGV. Не знаю, почему мне потребовалось немного времени, чтобы понять, что так будет лучше!

https://gyazo.com/1ece30bfcf0685df7317d01a7fefb3bb