powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / всплывающая форма рядом с полем
18 сообщений из 18, страница 1 из 1
всплывающая форма рядом с полем
    #37888745
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, форумчане!
Понадобилось в небольшом приложении, чтобы по нажатию кнопки на форме появлялась всплывающая форма рядом с полем.
Нашел на просторах всем известный календарик и попытался переделать его под эту задачу. Получилось, только если поле расположено непосредственно на форме, а вот если поле расположено на вкладке, то появляется ошибка "Объект не поддерживает свойство или метод". Вроде бы нет никакой разницы при обращении к полю просто в форме или к полю в наборе вкладок, но не работает. Уже сломал себе мозг. Примерчик во вложении. Может кто-нибудь помочь?
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37888779
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProfiM,

1. Попробуйте вставить в вкладку подчинённую форму и работать с ней.
2. Я бы на вашем месте создал глобальный модуль и основную часть кода переместил туда.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37888801
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alvk,

1. Как реализовать это с подчиненной формой, я знаю из того же примера с календарем. Но для моего случая она не нужна, т.к. на форме в других вкладках уже присутствуют другие субформы и мне не хотелось бы перегружать основную форму "лишними".
2. После решения проблемы с ошибкой, естественно, будет написан модуль, т.к. для разных полей мне надо будет показывать несколько разных форм.
Есть еще какие-нибудь идеи?
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37889016
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProfiM,

Вместо свойства Parent используйте функцию для нахождения формы контрола:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function ParentForm(ByVal vCtl As Control)
    Dim oParent As Object
    Set oParent = vCtl
    Do
        Set oParent = oParent.parent
        If TypeOf oParent Is Form Or TypeOf oParent Is Report Then Exit Do
    Loop
    Set ParentForm = oParent
End Function



Почему вы используете Let для объекта?
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37889140
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый ворчун,

Спасибо, а можете показать, как это использовать в коде? Я не специалист и только учусь.

По поводу Let - мы же присваиваем новые значения свойствам контрола. Или я неправильно понял описание Let?
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37889185
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый ворчун,

Разобрался. Все работает. Еще раз большое спасибо!
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919347
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снова прошу помощи по этой теме.
Нужно сделать универсальный метод, т.е. допустим на форме имеется несколько полей, напротив каждого из которых расположена кнопка, при нажатии на которые открывались свои формы (а не одна, как в примере с календарем).
В модуль переношу следующий код:


Option Compare Database
Option Explicit

Public f As Form
Public cntExportControl As Control

Public Property Let ExportControl(ByVal vNewValue As Control)
Dim intRecordSelectorsWidth As Integer 'Ширина области выделения (вроде как всегда 300)
Dim intHeaderHeight As Integer 'Высота заголовка
Dim intBorderWidth As Integer 'Толщина рамки
Dim intProoferTop As Integer 'Корректировка по горизонтали
Dim intProoferWidth As Integer 'Корректировка по вертикали
Set cntExportControl = vNewValue

With ParentForm(cntExportControl)
If .RecordSelectors Then intRecordSelectorsWidth = 300
intBorderWidth = (f.WindowWidth - f.InsideWidth) / 2 * -1
intProoferTop = .WindowTop + cntExportControl.Top + .CurrentSectionTop + cntExportControl.Height + intHeaderHeight
intProoferWidth = .WindowLeft + cntExportControl.Left + intRecordSelectorsWidth + intBorderWidth + .CurrentSectionLeft
intProoferWidth = intProoferWidth - f.WindowWidth + cntExportControl.Width
f.Move intProoferWidth, intProoferTop
End With
End Property

Public Function ParentForm(ByVal vCtl As Control)
Dim oParent As Object
Set oParent = vCtl
Do
Set oParent = oParent.Parent
If TypeOf oParent Is Form Or TypeOf oParent Is Report Then Exit Do
Loop
Set ParentForm = oParent
End Function


В вызывающей форме по событию нажатия кнопки:

Private Sub cmd1_Click()
DoCmd.OpenForm "Form2", , , , , acHidden
Set f = Forms("Form2")
Dim s$: s = f.Name
Forms(s).ExportControl = Me.txtTest 'вот здесь получаю ошибку
Forms(s).Visible = True
Set f = Nothing
End Sub


Получаю ошибку Run-time error 2465, Application-defined or object-defined error

Гуру, напишите, пожалуйста, в чем ошибка.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919357
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форме, которая открывается, разве есть ExportControl ?
Forms(s).ExportControl
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919362
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторPublic Property Let ExportControl(ByVal vNewValue As Control)

проперьтя, вроде, Set должна быть ...
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919374
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-Любитель,

Хмм, нет. Есть в отдельном модуле как public.
Суть я понял, натолкнете на мысль, как исправить?
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919378
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Нет, здесь дело не в этом. Когда код находится в модуле самой формы, то все работает.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919385
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотите чтобы было в формах - всавляйте в каждую. Либо делайте свой класс и внем храните ссылку на обычную форму без добавленных пропертиз. Либо программно открываете форму в режиме конструктора и вкорячиваете в нее вба код, добавляющий свойтство.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919396
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProfiMqwerty112,

Нет, здесь дело не в этом. Когда код находится в модуле самой формы, то все работает.
"поучи жену щи варить !" (с)
авторProperty Let Statement
Declares the name, arguments, and code that form the body of a Property Let procedure, which assigns a value to a property.

Property Set Statement
Declares the name, arguments, and code that form the body of a Property procedure, which sets a reference to an object.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919625
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Я нисколько не претендую на углубленное знание предметной области. В этом деле я новичок. Если Вам станет легче от осознания своего превосходства в вопросе владения навыками программирования VBA, то я их признаю и нисколько не оспариваю.
Что касается Вашего совета, то он не помог.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #37919632
ProfiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-Любитель,

Спасибо за совет! Сейчас мне действительно проще будет держать такой код в каждой форме, благо их немного.
Надеюсь, что когда дело дойдет до оптимизации кода, моих знаний уже будет достаточно, чтобы сделать универсальный метод.
Еще раз спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
всплывающая форма рядом с полем
    #39148193
MorivVV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подниму старую тему, чтобы не создавать новую.
Мне нужно в табличной форме вызывать форму календаря по двойному клику мыши.
Координаты отрывающегося календаря нахожу таким путем:
координату по вертикали тут все просто
Код: vbnet
1.
DateControlGhange.Parent.CurrentSectionTop


с координатой по горизонтали посложнее
Код: vbnet
1.
DateControlGhange.Parent.CurrentSectionLeft + ColW(НомерКолонки)


где
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Function ColW(i As Integer) As Integer 'функция определения ширины колонок по номеру столбца
  Dim K As Control
  For Each K In Forms(DateFormChange.Name)(DateControlGhange.Parent.Name).Form.Controls
    If K.ControlType = acTextBox Or K.ControlType = acComboBox Then
      'если номер колонки меньше нашей и она не скрытая
      If Forms(DateFormChange.Name)(DateControlGhange.Parent.Name).Form.Controls(K.Name).ColumnOrder < i And Not Forms(DateFormChange.Name)(DateControlGhange.Parent.Name).Form.Controls(K.Name).Then
        ColW = ColW + Forms(DateFormChange.Name)(DateControlGhange.Parent.Name).Form.Controls(K.Name).ColumnWidth
      End If
    End If
  Next
End Function


Все это работает хорошо до тех пор, пока не получается таблица с большим количеством колонок, приходится прокручивать колонки вправо, получается, что колонки скрываются в форме, но функция расчитывает полную сумму всех колонок до выделенной. Это приводит к тому, что календарь может открыться правее нужного поля, либо за пределами экрана, что вызовет ошибку.
Пытаюсь найти свойство поля на подобии ColumnHidden , показывающее, что поле было прокручено в сторону и на экране его сейчас не видно. Так же это актуально для закрепленных столбцов, когда прокручиваются средние колонки.
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #39148288
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
всплывающая форма рядом с полем
    #39149213
MorivVV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared,

В общем без апи никак не получается сделать то, что мне нужно.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / всплывающая форма рядом с полем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]