Как я могу заменить массив объектов VB6 в C#
Всем привет,
Мне нужно переделать старую программу, написанную на vb6, и разработать ее на c#.
У меня есть десятки форм и сотни полей (приложение, подключенное к Sql Server) для каждой формы. В vb6 я использовал трюк использования массивов элементов управления, используя процедуру для каждого типа объекта, улучшая свойство datafield (один для textbox, один для combobox и т. д.). Существует способ повторить это в C # без необходимости писать тысячи строк кода, чтобы делать одно и то же снова и снова.
Заранее спасибо
Спасибо за полезное предложение о запросе.
По поводу моей просьбы я приведу простой пример.
У меня есть форма с 10 текстовыми полями, 4 флажками, 2 combobox (виртуальный пример).
В vb6 я могу назвать их Txtbox(1), Txtbox(2), Txtbox(3)... chkbox(1), chkbox(2)...
Когда я получаю данные из БД, я могу использовать цикл For от 1 до 10 и присваивать значения текстовым полям в одной строке, а также для других объектов: txtbox(i).text=....
Когда мне нужно записать изменения в БД я могу сделать это с помощью события lostfocus и одной процедуры для каждого массива объектов:
Private Sub Txtbox_LostFocus(Индекс Как Целое Число)
использование свойства datafield для определения того, какое поле я должен обновить
Есть что-то похожее на C#?
извините, если я не очень хорошо объясняюсь
То же самое относится и к другим типам объектов (combobox, checkbox, ...)
Что я уже пробовал:
Теперь я делаю ряд за рядом и поле за полем
ZurdoDev
Я не понимаю вопроса. Возможно, показ какого-то кода vb6 может помочь?
Member 14034949
ОГА.Открыть "выбрать * из &ЛТ;имятаблицы&ГТ; где ID=" &амп; к CONNESSIONE, adOpenKeyset, adLockOptimistic
Если rsA.EOF, то GoTo fine
rsA.MoveFirst
Для ia = от 0 до 27
Если ИА &ЛТ; 4 Затем cmbIndG(ИА).текст = ОГА(cmbIndG(ИА).Свойство datafield) и усилитель; ""
Если ia < 3, то
cmbIcd(ИА).текст = ОГА(cmbIcd(ИА).Свойство datafield) и усилитель; ""
Если cmbIcd(ia).ListIndex &ГТ;= 0, то txtIcd(ИА).текст = cmbIcd(ИА).Список(, 2) &ампер; "" еще txtIcd(ИА).текст = ""
Конец, Если
Если ia < 20, то
Если rsA(txtDatiP(ia).DataField).Размер &ЛТ; 65000 тогда
txtDatiP(ИА).Свойство maxlength = ОГА(txtDatiP(ИА).Свойство datafield).Размер
Еще
txtDatiP(ia).MaxLength = 20000
Конец, Если
txtDatiP(ИА).текст = ОГА(txtDatiP(ИА).Свойство datafield) и усилитель; ""
Конец, Если
Если ia < 6, то
txtDataF(ИА).текст = ОГА(txtDataF(ИА).Свойство datafield) и усилитель; ""
Если функция isdate(txtDataF(ИА).текст) Затем dtDataF(ia).value = Format(txtDataFam(ia).text, "dd/mm/yyyy") Еще dtDataFam(ИА).значение = теперь
txtEtaFam(ИА).текст = ОГА(txtEtaFam(ИА).Свойство datafield) и усилитель; ""
Если значение bool(ОГА(Чкана(ИА).Свойство datafield)) Затем Чкана(ИА).значение = vbChecked еще Чкана(ИА).значение = vbUnchecked
Конец, Если
Если ia < 17, то
Если rsA(txtDatiF(ia).DataField).Размер &ЛТ; 65000 тогда
txtDatiF(ИА).Свойство maxlength = ОГА(txtDatiF(ИА).Свойство datafield).Размер
Еще
txtDatiF(ia).MaxLength = 20000
Конец, Если
txtDatiF(ИА).текст = ОГА(txtDatiF(ИА).Свойство datafield) и усилитель; ""
Конец, Если
Если ia < 20, то
If bool(rsA(chkFamiliari(ia).DataField)) Затем chkFamiliari(ia).value = vbChecked Else chkFamiliari(ia).value = vbUnchecked
Конец, Если
Если ia < 26, то
If bool(rsA(chkGravidanza(ia).DataField)) Затем chkGravidanza(ia).value = vbChecked Else chkGravidanza(ia).value = vbUnchecked
Конец, Если
Если ia < 25, то
txtAna(ИА).текст = ОГА(txtAna(ИА).Свойство datafield) и усилитель; ""
Конец, Если
Если ia < 8, то
Если RSA(chkAlimentazione(ИА).Свойство datafield) Затем chkAlimentazione(ia).value = vbChecked Else chkAlimentazione(ia).value = vbUnchecked
Конец, Если
Если ia < 10, то
Если rsA(chkSonno(ia).DataField) Тогда chkSonno(ia).value = vbChecked Else chkSonno(ia).value = vbUnchecked
Конец, Если
Следующий
ZurdoDev
Во-первых, поместите это в исходный вопрос.
Во-вторых, с какой частью всего этого вам нужна помощь?
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Member 14034949
Private Sub txtDatiP_LostFocus(индекс как целое число)
SalvaCampo txtDatiP(Index).DataField, txtDatiP(Index).text, txtDatiP(Index).Tag
Конец Подводной Лодки
Gerry Schmitz
Никто не понимает, о чем вы говорите. Куча плохого кода не делает вещи яснее.
CHill60
Ваша проблема все еще не совсем ясна. Вместо всех этих "магических чисел" попробуйте объяснить, для чего предназначен код. Также объясните, что вы подразумеваете под "улучшением поля данных".
Вместо того чтобы пытаться переписать то, что делает код VB6, попробуйте повторить эффекты из первоначальной программы.
Вы указали, что приложение подключено к sql server - это способ, который, по-видимому, оправдывает наличие сотен "полей" (не уверен, что они есть в данном контексте) - это кричит мне, что вы, вероятно, используете неправильные типы элементов управления.
Наконец - пожалуйста, не реплицируйте SQL-запрос, оставляя в уязвимости атаку SQL-инъекций. Не используйте подобную конкатенацию строк для формирования SQL - команд-вместо этого используйте параметризованные запросы