Dataset не видно из других форм

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

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

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Dataset не видно из других форм

Сообщение Вячеслав_К » 02.02.2004 (Пн) 20:44

Создал Dataset в одной из форм с помощью конструктора, но Dataset не видно из других форм. Не могу связать таблицы с элементами управления, не видно таблиц.
modifiers установлен как friend.
Помогите.

Заранее благодарен.
Вячеслав.

alsadykov
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 14.01.2004 (Ср) 19:05
Откуда: почти Екатеринбург

Сообщение alsadykov » 02.02.2004 (Пн) 21:16

А другие формы как создаешь?

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Сообщение Вячеслав_К » 02.02.2004 (Пн) 21:44

alsadykov писал(а):А другие формы как создаешь?

Всё только через конструктор.
Что бы меньше ошибок было.
И открываю только как модальные.

alsadykov
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 14.01.2004 (Ср) 19:05
Откуда: почти Екатеринбург

Сообщение alsadykov » 02.02.2004 (Пн) 21:59

Я так понимаю - "другие" формы не видят основную, в уоторой объявлен датасет, хоть он и Friend. Или объявляй основную форму глобальной или передавай другим формам ссылку на нее в конструкторе.

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Сообщение Вячеслав_К » 02.02.2004 (Пн) 23:48

alsadykov писал(а):Я так понимаю - "другие" формы не видят основную, в уоторой объявлен датасет, хоть он и Friend. Или объявляй основную форму глобальной или передавай другим формам ссылку на нее в конструкторе.

А как её объявить гловальной?
И заранее спасибо за подсказку.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.02.2004 (Вт) 11:47

Лучше передовать ссылку на экземпляр форму другим формам в какое-нибудь свойство. Для этого в формах завести, например свойство DataForm :) или что-нибудь такое.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 03.02.2004 (Вт) 17:45

Зачем же передавать ссылку на форму, когда можно передать ссылку на DataSet? :)
Изображение Вопросы - рёбрами!

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Сообщение Вячеслав_К » 03.02.2004 (Вт) 17:49

gaidar писал(а):Лучше передовать ссылку на экземпляр форму другим формам в какое-нибудь свойство. Для этого в формах завести, например свойство DataForm :) или что-нибудь такое.

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

Property dataform() As Form
Get
Return Me
End Get
Set(ByVal Value As Form)
'?
End Set
End Property

для доступа из других форм к этой форме,
dim dtf as new Form1
dim dts as dataset
dts=dtf.dataform.dataset1

Привильно? но ничего не работает.
И вообще зачем чесать правое ухо левой рукой?
Может есть что попроще?

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.02.2004 (Вт) 18:59

Нет. Лучше в других формех не содержащих dataset создать свойства.

Property dataform() As Form
Get
Return m_dataform
End Get
Set(ByVal Value As Form)
m_dataform = Form
End Set
End Property

И уже внутри своей формы обращаться к приватному m_dataform.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Сообщение Вячеслав_К » 03.02.2004 (Вт) 19:38

Ничего не получается.
1. в строке m_dataform=Form ругается на то что Form is a type and cannot be used as an expression

Еще раз объясняю ситуацию.
1. Это в форме Form1 которая открывает Form2 с Dataset
Private m_dataform As New Form2()
Property dataform() As Form
Get
Return m_dataform
End Get
Set(ByVal Value As Form)
m_dataform = Form
End Set
End Property

m_dataform.ShowDialog()


2.
а что в Form3 из которой я хочу получить доступ к Dataset1 в Form2

dim dtf as new form()
dim dts as dataform

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.02.2004 (Вт) 19:54

Ох... И я чего-то сегодня немножно не в себе, но и вы не понимаете.

Поясняю мысль.

Есть форма, на ней некий объект. Так. Все равно что.

Для КАЖДОЙ другой формы, которая должна использовать этот объект:

Private m_dataform As SomeForm()

Property dataform() As Form
Get
Return m_dataform
End Get
Set(ByVal Value As Form)
m_dataform = Value ' Тут я ошибся!
End Set
End Property

При запуске формы SomeForm - из кода Form_Load:

AnotherForm.dataform = Me

И уже после этого из других форм использовать.

Me.m_dataform.dataset.lalala :)

Вот так.

Можно сразу передавать в свойства dataset если на форме больше ничего не нужно (в крайнем случае форму можно будет получать как parent от dataset'a).
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Сообщение Вячеслав_К » 03.02.2004 (Вт) 20:12

Спасибо

Вячеслав_К
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 02.02.2004 (Пн) 20:35
Откуда: Москва

Сообщение Вячеслав_К » 03.02.2004 (Вт) 23:30

Всё разобрался, а нужно было всего:
1. объявить в модуле public frm as form
2. присвить ей при запуске формы Form1 к которой нужен доступ frm=Me
3. в форме из которой осуществляется доступ объявить переменную
private frm_data as Form1
4. frm_data=frm
и все.
И не нужны ни какие свойства.....

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 03.11.2005 (Чт) 14:31

Что-то я тоже не могу разобраться в этой проблеме. У меня есть Form1, которая и запускается. На ней есть DataSet11. Потом я модально открываю Form2. В Form2 я объявила

Код: Выделить всё
Dim frm1 As New Form1


затем, пытаюсь посмотреть количество строк таблицы DataSet11 из формы Form2

Код: Выделить всё
MsgBox(frm1.DataSet11.Ответы.Rows.Count)


Но он выдает его равным 0

А как все таки связать DataSet11, обявленный и используемый в Form1 с Form2 ?

AlexM
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.06.2002 (Вт) 11:26
Откуда: Украина, Житомир

Сообщение AlexM » 03.11.2005 (Чт) 16:23

To Loiste:
Добавь к проекту новый модуль Module1. В нем создай процедуру Sub Main. В свойствах проекта укажи стартовый объект - Sub Main. На уровне модуля объяви переменную
Код: Выделить всё
Public frm1 As Form1

В процедуре Sub Main напиши:
Код: Выделить всё
frm1 = New Form1
Application.Run(frm1)


Теперь можно использовать frm1 из любой формы.
[/code]

AlexM
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.06.2002 (Вт) 11:26
Откуда: Украина, Житомир

Сообщение AlexM » 03.11.2005 (Чт) 16:23

To Loiste:
Добавь к проекту новый модуль Module1. В нем создай процедуру Sub Main. В свойствах проекта укажи стартовый объект - Sub Main. На уровне модуля объяви переменную
Код: Выделить всё
Public frm1 As Form1

В процедуре Sub Main напиши:
Код: Выделить всё
frm1 = New Form1
Application.Run(frm1)


Теперь можно использовать frm1 из любой формы.
[/code]

AlexM
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.06.2002 (Вт) 11:26
Откуда: Украина, Житомир

Сообщение AlexM » 03.11.2005 (Чт) 16:26

To Loiste:
Добавь к проекту новый модуль Module1. В нем создай процедуру Sub Main. В свойствах проекта укажи стартовый объект - Sub Main. На уровне модуля объяви переменную
Код: Выделить всё
Public frm1 As Form1

В процедуре Sub Main напиши:
Код: Выделить всё
frm1 = New Form1
Application.Run(frm1)

Теперь можно использовать frm1 из любой формы.

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 05.11.2005 (Сб) 12:29

Я так понимаю проблему. Dataset хоть и объявлен Friend, но является свойством Form1, поэтому доступен только через неё. У Form2 нет возможности сослаться на Form1, а значит, и на Dataset. Значит, надо создать такую возможность. В Form2 объявляем свойство (как уже советовал Гайдар):
Код: Выделить всё
Private m_dataform As Form1

Property dataform() As Form1
   Get
      Return m_dataform
   End Get
   Set (ByVal Value As Form1)
      m_dataform = Value
   End Set
End Property


Из Form1 запускаем Form2:
Код: Выделить всё
Private Sub StartForm2()
   Dim frm2 As New Form2()
   frm2.dataform = Me    'передаём ссылку на запускающую форму
   frm2.ShowDialog()
End Sub


В Form2 используем свойство:
Код: Выделить всё
dataform.DataSet1.свойство_или_метод_датасета


Только я бы передавал ссылку только на тот объект, что нужно использовать, т.е. в данном случае на DataSet.
Изображение Вопросы - рёбрами!

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 07.11.2005 (Пн) 9:29

Спасибо большущее всем!! Теперь получилось :) Я пока буду работать по второму предложенному варианту.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110

    TopList