gpt4 book ai didi

ms-access - 如何在Access VB运行时创建控件?

转载 作者:行者123 更新时间:2023-12-02 14:44:28 27 4
gpt4 key购买 nike

如何在 Microsoft Access 中使用 VB 代码在运行时创建控件?经过一番挖掘,我发现这可以通过 CreateControl 函数实现。问题是我在网上找到的每个随机论坛都有一些与此类似的代码:

Private Sub Button_Click()
Call AddLabel
End Sub

Function AddLabel()
Set ctl = CreateControl("MyForm", acLabel, acDetail, "", "", 0, 0, 100, 100)
With ctl
.name = "myTextBox"
.Caption = "Hello World!"
.Height = 50
.Width = 100
.FontSize = 11
.Visible = True
End With
End Function

但此代码似乎未创建可见标签。

就我而言,我只是想学习如何让它发挥作用。因此,我创建了一个带有按钮的空白表单,单击该按钮将创建一个标签,上面写着“Hello world!”。我期望发生的是当单击按钮时,一个文本框将显示在表单的左上角。我很好奇是否有人可以帮助我展示一些实际有效的代码的简单示例。

在有人说我可以创建标签并隐藏它然后更改其可见性属性之前,我知道。但我想知道如何动态创建控件,并且让这个简单的示例实际工作将极大地帮助我的理解。

最佳答案

您需要的文档在这里(这些文档专门用于 Access VBA):

根据文档,此功能有一些很大的限制:

  • 在表单的生命周期内仅限 754 个控件(这不会通过删除它们来重置,因此您可能很快就会遇到此限制)
  • 必须在“设计” View 中完成(因此无法在 mde/accde 中完成)
  • 它在多用户环境中的表现尚存疑问。

由于这些限制,除非您最初用于设计表单,否则不建议这样做。

重复问题:How do you dynamically create controls on a MS Access form?

为了响应OP的建议,这里是我的测试代码,它能够添加40个控件并重复该过程50次而不超过754个限制(我在测试中重复使用了40个名称)。

警告 1 这是不可取的,因为它只能在设计 View 中完成,而在 mde/accde 中不起作用。

注意事项 2:它在多用户环境中的表现值得怀疑。

此代码来自具有两个按钮的表单。它打开第二个名为“Form2”的表单

Option Compare Database
Option Explicit

Private Const FORM_NAME As String = "Form2"
Private m_nCounter As Long

Private Sub cmdCreate_Click()
runDynamicForm
End Sub

Private Sub cmdRepeat_Click()

Dim n As Long

m_nCounter = 0

For n = 0 To 50
runDynamicForm
DoEvents
DoCmd.Close acForm, FORM_NAME, acSaveNo
DoEvents
Next 'n

MsgBox m_nCounter

End Sub

Private Sub runDynamicForm()

Const DYNAMIC_TAG As String = "dynamic"

Dim n As Long
Dim frm As Form
Dim ctl As Access.Control

On Error GoTo EH

Application.Echo False

DoCmd.OpenForm FORM_NAME, acDesign
Set frm = Application.Forms(FORM_NAME)

For n = frm.Controls.Count - 1 To 0 Step -1
Set ctl = frm.Controls(n)
If ctl.Tag = DYNAMIC_TAG Then
Application.DeleteControl FORM_NAME, ctl.Name
End If
Next 'n

For n = 1 To 20

With Application.CreateControl(FORM_NAME, acLabel, acDetail, , , 400, n * 300, 1500, 300)

.Name = "lbl" & n
.Caption = "Question " & n
.Visible = True
.Tag = DYNAMIC_TAG

End With

With Application.CreateControl(FORM_NAME, acTextBox, acDetail, , , 2000, n * 300, 3000, 300)

.Name = "txt" & n
.Visible = True
.TabIndex = n - 1
.Tag = DYNAMIC_TAG

End With

m_nCounter = m_nCounter + 2

Next 'n

DoCmd.Close acForm, FORM_NAME, acSaveYes

DoCmd.OpenForm FORM_NAME, acNormal

GoTo FINISH

EH:
With Err
MsgBox "Error:" & vbTab & .Number & vbCrLf _
& "Source" & vbTab & .Source & vbCrLf _
& .Description
End With

FINISH:

Application.Echo True

End Sub

关于ms-access - 如何在Access VB运行时创建控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com