как заставить функцию "понимать" тип элемента упра

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

как заставить функцию "понимать" тип элемента упра

Сообщение student-uni » 28.01.2007 (Вс) 15:38

Хочу создать класс/(или ф-цию), что бы заливать данные в элементы упраления (ComboBox, ListView, DataGrid...) :

Т.е. я даю элемент управления, строку соединения с БД и SQL запрос
а получаю заполненный элемент управления

Получается что мне надо как аргумент передавать элемент управления.
Если б я работал только с одним элементом управления напр ComboBox то небыло бы проблем.

myFunc(byVal myCb as Combobox ...)

Но элемент управления каждый раз другой.

Вопрос :
как сделать так, чтобы функция "понимала" любой элемент управления

Спасибо

П.с.
Как вариант наверно можно было бы сделать перегруженную функцию и записать её для нужных элементов управления

overloads myFunc(byVal myCb as Combobox ...)
overloads myFunc(byVal myLw as ListView ...)

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

Наверно сдесь нужно как то через интерфейс, но как

Помогите пожалуйста
Заранее спасибо

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2007 (Вс) 15:42

Например, As IList, если все элементы его поддерживают. Или аналогично.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 28.01.2007 (Вс) 17:54

Вы имеете ввиду имплементировать класс с IList ?

А что потом ? Перечислить там ComboBox, ListView и DataGrid, ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2007 (Вс) 18:44

Мы имеем в виду объявить параметр функции myFunc(myC as ilist) (например).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 28.01.2007 (Вс) 19:24

я так и думал и пробовал,
но как создать такой аргумент ? (чтоб передать его потом)

Dim myC1 as IList
myC1.Add(myComboBOx)

myFunc(myC1)

не проходит,
вызывает NullReference Exeption
и просит инициализировать myC1 через new
но ведь нельзя, это же интерфейс или ?

Спасибо

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2007 (Вс) 19:26

:roll:

myFunc (myComboBox)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 28.01.2007 (Вс) 19:51

Простите, но тогда внутри функции

myFunc(myC as ilist)

у переменной myC

я не имею параметров
DataSource и DataBind

я же хочу туда данные залить из DataTable
и думал как то типа

myC.DataSource = myTable
myC.DataBind

/ так было бы если бы я использовал только Комбобоксы и задекларировал ф-цию myFunc(myC as КомбоБокс)/

а как мне теперь привязать DataSource и DataBind ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2007 (Вс) 19:57

student-uni, ты смотришь вообще документацию к продукту, что от чего наследуется, или на ощупь идёшь? :roll:
Объявляй как ListControl, например.
Удачи в дальнейших слепых перемещениях.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 28.01.2007 (Вс) 20:26

я как раз в Object Browser
Combobox наследует от ListControl ок

но DataGrid наследует от Forms.Control
так что если я объявлю как ListControl, то будут проходить только его наследники, а хотелось бы любой контрол (ну хотя бы ещё Датагриды)

2-ое, даже если я и объявлю ListControl, то как быть с DataTextField и DataValueField если они у комбобоксов разные ?

П.С.

Я ведь не скорого решения хочу. Задача у меня решена, я заливаю все контролы в ручную. Хочется сделать универсальный класс Чтоб потом при добавлении нового контролла вызывать тот же класс и передавать ему ещё один новый контрол + SQL запрос , и контрол заливался нужными данными.

Мне бы идею, как это сделать.
Полагаю нужно создать итнтерфейскласс, который будет описывать эту функцию. А реализовать саму функцию в дочерних классах.
Таким образом будет одна функция заливки контролла, но она будет будет работать по разному в зависимости от того, в каком классе она реализована.

:cry:


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 6

    TopList