Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как программно узнать список объектов на форме?  [new]
_Sergio2005_
Member

Откуда:
Сообщений: 30
Добрый день.
Как программно узнать список объектов на форме?
И как узнать что это за объект (поле, поле со списком, список и т.д)?
Спасибо.
13 июл 18, 07:58    [21567711]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3938
_Sergio2005_
список объектов на форме
Controls F1
_Sergio2005_
как узнать что это за объект
ControlType F1 (Enum AcControlType)
13 июл 18, 08:10    [21567723]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4403
_Sergio2005_,

я вывожу в текстовик в таком виде(тип контрола, имя контрола, данные)
frm00_Projects              ==================
tblProjectStage
 100          ProjectMainID_Надпись       Шифр проекта
 100          ProjectName_Надпись         Наименование
 100          ProjectShortName_Надпись    Краткое наименование
 100          ProjectCustomerID_Надпись   Шифр Заказчика
 100          ProjectCustomer_Надпись     Заказчик
 100          GIP_Надпись   ГИП
 100          ProjectYear_Надпись         Дата занесения
 100          Comment_Надпись             Comment
 100          Stage_OTR_Надпись           ОТР
 100          Stage_P_Надпись             П
 100          Stage_R_Надпись             Р
 100          IsCapitalObj_Надпись        IsCapitalObj
 100          IsLinearCapitalObj_Надпись  IsLinearCapitalObj
 100          Надпись26     Список проектов
 109          ProjectMainID ProjectMainID
 109          ProjectName   ProjectName
 109          ProjectShortName            ProjectShortName
 109          ProjectCustomerID           ProjectCustomerID
 109          ProjectCustomer             ProjectCustomer
 109          ProjectYear   ProjectYear
 109          Comment       Comment
 106          Stage_OTR     ====
 106          Stage_P       ====
 106          Stage_R       ====
 109          IsCapitalObj  IsCapitalObj
 109          IsLinearCapitalObj          IsLinearCapitalObj
 102          Линия28       ====
 111          ПолеСоСписком31             GIP///SELECT Сотрудники.id_w, Сотрудники.WorkerFamily FROM Сотрудники WHERE (((Сотрудники.WorkerPosition)="ГИП")); 
 104          Кнопка29      Редактировать проект
 104          Кнопка30      Создать проект
13 июл 18, 09:57    [21567923]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4403
_Sergio2005_,

или в таблицу
имя формы: frm00_Projects
источник данных:tblProjectStage


типимяданные
100ProjectMainID_Надпись Шифр проекта
100ProjectName_Надпись Наименование
100ProjectShortName_Надпись Краткое наименование
100ProjectCustomerID_Надпись Шифр Заказчика
100ProjectCustomer_Надпись Заказчик
100GIP_Надпись ГИП
100ProjectYear_Надпись Дата занесения
100Comment_НадписьComment
100Stage_OTR_НадписьОТР
100Stage_P_НадписьП
100Stage_R_НадписьР
100IsCapitalObj_Надпись IsCapitalObj
100IsLinearCapitalObj_Надпись IsLinearCapitalObj
100Надпись26 Список проектов
109ProjectMainID ProjectMainID
109ProjectName ProjectName
109ProjectShortNameProjectShortName
109ProjectCustomerIDProjectCustomerID
109ProjectCustomerProjectCustomer
109ProjectYear ProjectYear
109Comment Comment
106Stage_OTR ====
106Stage_P ====
106Stage_R ====
109IsCapitalObj IsCapitalObj
109IsLinearCapitalObjIsLinearCapitalObj
102Линия28 ====
111ПолеСоСписком31GIP///SELECT Сотрудники.id_w, Сотрудники.WorkerFamily FROM Сотрудники WHERE (((Сотрудники.WorkerPosition)="ГИП"));
104Кнопка29 Редактировать проект
104Кнопка30 Создать проект
13 июл 18, 10:10    [21567954]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
Quiet333
Member

Откуда: 55-37 сш 37-37 вд
Сообщений: 1016
ПЕНСИОНЕРКА

я вывожу в текстовик в таком виде(тип контрола, имя контрола, данные)

А какой процедурой?
13 июл 18, 10:24    [21567983]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5515
Панург
.. Controls F1
_Sergio2005_
как узнать что это за объект
ControlType F1 (Enum AcControlType)
По моему это самое простое решение:
Dim a As Control
For Each a In Controls
Debug.Print a.Name; a.ControlType
Next
13 июл 18, 11:56    [21568325]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4403
sdku
По моему это самое простое решение:

мой первый вариант был почти такой же
Dim a As Control
For Each a In Controls
Debug.Print  a.ControlType,a.Name
Next


затем добавила
--текст на надписи и кнопке
--источник данных для текст боксов и флажков
--источник данных для списков и формы
--потом стала выводить в текстовики для всей базы в целом
Option Compare Database
Option Explicit
Dim doc As DAO.Document
Dim dbs As DAO.Database

Dim s1
Sub mspravka()
If Len(Dir("c:\temp\forms\*.*")) > 0 Then
Kill "c:\temp\forms\*.*"
End If

If Len(Dir("c:\temp\reports\*.*")) > 0 Then
Kill "c:\temp\reports\*.*"
End If

mform
mreport
End Sub
Sub mform()

Dim frm As Form
Set dbs = CurrentDb
For Each doc In dbs.Containers("forms").Documents
s1 = doc.Name
Debug.Print s1
DoCmd.OpenForm s1, acDesign, , , , acHidden
mcolor s1, , 1
DoCmd.Close acForm, s1, acSaveYes
Next doc
End Sub

Sub mreport()

Dim frm As Report
Set dbs = CurrentDb
For Each doc In dbs.Containers("reports").Documents
s1 = doc.Name
Debug.Print s1
DoCmd.OpenReport s1, acDesign, , , , acHidden
mcolor s1, "reports", 1
DoCmd.Close acReport, s1, acSaveYes
Next doc
End Sub


Sub mcolor(sname, Optional stype As String = "forms", Optional r As Long = 0)
If Len(Dir("c:\temp", vbDirectory)) = 0 Then
MkDir "c:\temp"
End If

If Len(Dir("c:\temp\forms", vbDirectory)) = 0 Then
MkDir "c:\temp\forms"
End If

If Len(Dir("c:\temp\reports", vbDirectory)) = 0 Then
MkDir "c:\temp\reports"
End If

If r = 0 Then Exit Sub
''''''''
Dim CTR As Control
Dim OBJ As Object
Dim frm As Form
Dim rpt As Report
Dim que As DAO.QueryDef
Dim s1, J1, sname1
Reset


If stype = "forms" Then
For Each frm In Forms
If frm.Name = sname Then
Set OBJ = Forms(sname)
sname1 = zamena(sname)
Open "c:\temp\forms\" & sname1 & ".txt" For Output As #1
GoTo n_frm
End If
Next frm
MsgBox sname & " no found"
Exit Sub

Else
''Set obj = Reports(sname)
''Open "c:\temp\reports\" & sname & ".txt" For Output As #1
For Each rpt In Reports
If rpt.Name = sname Then
Set OBJ = Reports(sname)
sname1 = zamena(sname)
Open "c:\temp\Reports\" & sname1 & ".txt" For Output As #1
GoTo n_frm
End If
Next rpt
MsgBox sname & " no found"
Exit Sub
End If
''''''''''''''''''''''''''''
n_frm:



Debug.Print OBJ.Name, "=================="
Print #1, OBJ.Name, "=================="
s1 = OBJ.RecordSource
Print #1, s1
Debug.Print s1
'''''''''''''''
For Each que In CurrentDb.QueryDefs
If InStr(s1, "SELECT ") = 0 Then
J1 = 0
End If
If LCase(que.Name) = LCase(s1) Then
Print #1, que.SQL
Print #1, "================"
Exit For
End If
Next que
''''''''''''''''
For Each CTR In OBJ.Controls
J1 = CTR.ControlType
Print #1, J1, CTR.Name,
If J1 = 109 Then
s1 = CTR.ControlSource

If Mid(s1, 1, 1) = "=" Then
Debug.Print J1, CTR.Name, s1
CTR.BackColor = vbGreen

Else
CTR.BackColor = vbYellow
End If
ElseIf J1 = 100 Or J1 = 104 Then
s1 = CTR.Caption
ElseIf J1 = 111 Then
s1 = CTR.ControlSource & "///" & CTR.RowSource



Else
s1 = "===="
End If
s1 = Replace(s1, Chr(13), "~")
s1 = Replace(s1, Chr(10), "~")
s1 = Replace(s1, Chr(11), "~")

Print #1, s1
Next CTR
Reset
End Sub
Function zamena(zname)
Dim sw
sw = zname
sw = Replace(sw, ".", "_")
sw = Replace(sw, ",", "_")
sw = Replace(sw, "\", "_")
sw = Replace(sw, "/", "_")
sw = Replace(sw, """", "_")
sw = Replace(sw, "'", "_")
zamena = sw
End Function
13 июл 18, 12:12    [21568382]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
Quiet333
Member

Откуда: 55-37 сш 37-37 вд
Сообщений: 1016
Спасибо. Поиграюсь...
13 июл 18, 12:51    [21568540]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5515
ПЕНСИОНЕРКА,
Я понял так что у ТС сложность в том чтоб перебрать элементы формы а уж как их представить-вариантов много-пусть делает как желает
("Я так думаю"-Мимино)
13 июл 18, 13:01    [21568589]     Ответить | Цитировать Сообщить модератору
 Re: Как программно узнать список объектов на форме?  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5515
Dim a As Control
For Each a In Controls
If a.Section = 0 Then
    If a.ControlType = 100 Then Debug.Print "надпись - '" & Left(a.Name, InStr(a.Name, "_") - 1) & "'"
    If a.ControlType = 104 Then Debug.Print "кнопка - " & a.Name
    If a.ControlType = 109 Then Debug.Print "поле - " & a.Name
    If a.ControlType = 112 Then Debug.Print "подчФ - " & a.Name
'и т.д для нужных Вам типов
End If
Next
Me.ctl.SetFocus 'любой элемент-убираем фокус с кнопки-если процедура выполняется по её нажатию
13 июл 18, 15:33    [21569289]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить