2009-10-28 18 views
7

Genellikle bir etiket denetimi bir metin kutusuna veya benzer başka bir denetime bağlanır. Etikete kod yoluyla erişmenin bir yolu olduğunu biliyorum, ancak nasıl yapılacağını hatırlamıyorum.Koddaki bir denetimin etiketine nasıl erişilir?

Herkes yardımcı olabilir mi?

Belki böyle bir şey: Ben doğrulama amaçlı bir form üzerindeki kontrollerin numaralandırılıyor sırasında neye bu kullanacağız

Me.txtName.Child!lblName.Value 

Ya

Me.txtName.Parent!lblName.Value 

. Ardından, kullanıcıya, hatanın nerede olduğunu göstermek için hata mesajındaki bilgi olarak bir kontrol etiketi kullanmak istiyorum. onun erişim Ben

Formlar olduğunu düşünüyorsanız Kontrol 0 bağlantılı etiket

cevap

8

Eğer

Text0.Controls.Item(0).Caption 

deneyebilirsiniz! YourFormName!

YourField.Value Veya bir alt formunuz varsa:

Formlar! YourMainForm! rSubForm! YourField.Value

+0

Evet, işte budur. Teşekkür ederiz! – Markus

1

olduğu

metin ile
5

@Astander doğru cevabı vermiştir, ancak tüm denetimlerin aynı türde Denetimler koleksiyonuna sahip olmadığını unutmayın.

TextBox'lar, ComboBox'lar, ListBox'lar, CheckBox'lar, denetim koleksiyonlarında (ekli etiket) en fazla 1 öğeye sahiptir, ancak etiket eklenmemişse, buna sahip olmazlar. bir hata atar.

Bir Option Group'ta çoklu denetimler, etiket ve seçenek düğmesi veya çerçevenin içindeki geçiş düğmeleri bulunur. Form araçları araç çubuğundan bir formda bir seçenek grubu bıraktığınızda, çerçeve ekli bir etiketle oluşturulur, bu nedenle dizin 0 ile kontrol olur. Ancak, örneğin, varsayılan etiketi silerseniz, seçenek düğmelerini ekleyin ve sonra bir etiket ekleyin, dizin 0 olmayacaktır, ancak dizin .Controls.Count - 1.

Bu nedenle, bir seçenek grubu etikelinin başlığı için, varsayılan etiketi silerseniz, dikkatli olmak istersiniz. etiketi de ekledikten sonra çerçevedeki kontrolleri de silersiniz. Durum böyle değilse, etiketi adlandırmanız ve isme göre isimlendirmeniz gerekir, çünkü seçenek/geçiş düğmeleri için etiketler seçenek grubunun Kontroller koleksiyonunun bir parçasıdır (bu beni şaşırttı - Sadece Kontrollerde olmasını bekledim) Eklendikleri seçenek/geçiş düğmesinin toplanması).

Bu sorunu önlemek için, seçenek grubunun Controls koleksiyonuna, seçenek/değiştirme düğmelerine eklenmiş etiketleri arayan ve ardından seçenek grubunun Controls koleksiyonuna ikinci kez bağlanan, bu sefer kodlanmış kodları hayal edebilirsiniz. sadece etiketlere bakarak.Böyle bir şey: oldukça kontrol referansı yerine, etiket adını dönmek için muhtemelen daha mantıklı olur, böylece hiçbir etiket ekli varsa

Public Function FindOptionGroupLabel(ctlOptionGroup As Control) As Control 
    Dim ctl As Control 
    Dim strOptionToggleLabels As String 

    If ctlOptionGroup.ControlType <> acOptionGroup Then 
     MsgBox ctlOptionGroup.Name & " is not an option group!", _ 
     vbExclamation, "Not an option group" 
     Exit Function 
    End If 
    For Each ctl In ctlOptionGroup.Controls 
     Select Case ctl.ControlType 
     Case acOptionButton, acToggleButton 
      If ctl.Controls.Count = 1 Then 
      strOptionToggleLabels = strOptionToggleLabels & " " & ctl.Controls(0).Name 
      End If 
     End Select 
    Next ctl 
    strOptionToggleLabels = strOptionToggleLabels & " " 
    For Each ctl In ctlOptionGroup.Controls 
     Select Case ctl.ControlType 
     Case acLabel 
      If InStr(" " & strOptionToggleLabels & " ", ctl.Name) = 0 Then 
      Set FindOptionGroupLabel = ctl 
      End If 
     End Select 
    Next ctl 
    Set ctl = Nothing 
    End Function 

Şimdi, bu kırar:

Public Function FindOptionGroupLabel(ctlOptionGroup As Control) As String 
    Dim ctl As Control 
    Dim strOptionToggleLabels As String 

    If ctlOptionGroup.ControlType <> acOptionGroup Then 
     MsgBox ctlOptionGroup.Name & " is not an option group!", _ 
     vbExclamation, "Not an option group" 
     Exit Function 
    End If 
    For Each ctl In ctlOptionGroup.Controls 
     Select Case ctl.ControlType 
     Case acOptionButton, acToggleButton 
      If ctl.Controls.Count = 1 Then 
      strOptionToggleLabels = strOptionToggleLabels & " " & ctl.Controls(0).Name 
      End If 
     End Select 
    Next ctl 
    strOptionToggleLabels = strOptionToggleLabels & " " 
    For Each ctl In ctlOptionGroup.Controls 
     Select Case ctl.ControlType 
     Case acLabel 
      If InStr(" " & strOptionToggleLabels & " ", ctl.Name) = 0 Then 
      FindOptionGroupLabel = ctl.Name 
      End If 
     End Select 
    Next ctl 
    Set ctl = Nothing 
    End Function 

Bu, seçenek grubunun Kontroller koleksiyonundan tek bir döngü ile yapılabilirdi, ama geç kaldı! Kurşun geçirmezliğe oldukça yakın bir şey var, tabii ki herkes bir sıçanın kıçını veriyor! :)

1

Burada, OptionButtons ile ilişkili etiketleri yeniden adlandırmak için yazdığım bazı kodlar var. Bir etiketin etiketlediği kontrole işaret eden bir ebeveyn özelliği vardır. Altprogram, OptionButtons için writtenn ise işlevi oldukça genel. Bu kod, etiket ilişkilendirilmediğinde, herhangi bir kurtarma sağlamadığım dışında çoğu şey için çalışmalıdır. As Control Kontrol Dim ctlParent olarak Kontrol Dim ctlLabel olarak Form Dim CTL olarak Dize Dim frm olarak

Public Function paNameControlLabel (As String As String FormName, ControlName)

Set frm = Forms(FormName) 
For Each ctl In frm.Controls 
    Select Case ctl.ControlType 
     Case acLabel 
      If ctl.Parent.Name = ControlName Then 
       Debug.Print "Label " & ctl.Name & " Renamed to lbl" & ControlName 
       ctl.Name = "lbl" & ControlName 
       paNameControlLabel = ctl.Name 
      End If 
    End Select 
Next ctl 

End Function Ortak alt paNameOptionButtonLabels (As string FormName) As Control Form Dim CTL olarak Dim frm

Set frm = Forms(FormName) 
For Each ctl In frm.Controls 
    If ctl.ControlType = acOptionButton Then 
     Debug.Print paNameControlLabel(FormName, ctl.Name) 
    End If 
Next ctl 
Set frm = Nothing 

End Sub

İlgili konular