Frage

Oft ist eine Etikettensteuerung an eine Textbox oder eine ähnliche andere Steuerung gebunden. Ich weiß, dass es eine Möglichkeit gibt, über Code auf das Etikett zuzugreifen, aber ich erinnere mich nicht, wie es geht.

Kann jemand helfen?

Vielleicht so etwas wie:

Me.txtName.Child!lblName.Value

Oder

Me.txtName.Parent!lblName.Value

Ich werde dies verwenden, wenn ich für Validierungszwecke die Steuerelemente in einem Formular aufzählige. Dann möchte ich das Etikett für eine Steuerung als Informationen in der Fehlermeldung verwenden, um dem Benutzer anzuzeigen, wo sich der Fehler befindet.

War es hilfreich?

Lösung

Mit dem Textfeld können Sie es versuchen

Text0.Controls.Item(0).Caption

wobei Control 0 das verknüpfte Etikett ist

Andere Tipps

@Astander hat die richtige Antwort gegeben, aber denken Sie daran, dass nicht alle Kontrollen die gleichen Kontrollkollektionen haben.

Textboxen, Comboboxen, Listboxen und Kontrollkästchen haben maximal 1 Element in ihrer Steuerungskollektion (das angehängte Etikett). Wenn das Etikett jedoch nicht angehängt ist, haben sie das nicht einmal, also. .

Eine Optionsgruppe verfügt über mehrere Steuerelemente, die Beschriftung und die Optionstaste oder die Schaltflächen für Optionen oder Umschaltungen im Rahmen. Wenn Sie eine Optionsgruppe in einem Formular aus der Symbolleiste der Form Tools fallen lassen, wird der Rahmen mit einer angehängten Etikett erstellt. Daher ist es das Steuerelement mit Index 0. Wenn Sie beispielsweise die Standardbezeichnung löschen, fügen Sie Optionsschaltflächen und fügen Sie die Optionsschaltflächen hinzu und fügen Sie dies zu. Fügen Sie dann ein Etikett zurück, es ist nicht Index 0, sondern Index .Controls.Count - 1.

Für die Überschrift einer Option Group Lable möchten Sie also entweder darauf achten, dass Sie die Steuerelemente im Rahmen auch löschen, nachdem Sie das Etikett zurückgegeben haben. Wenn dies nicht der Fall ist, müssen Sie das Etikett benennen und namentlich darauf verweisen, da die Beschriftungen für die Option/Umschalttasten Teil der Steuerung der Optiongruppe sind Sammlung der Option/Umschalttaste, an die sie angehängt wurden).

Um dieses Problem zu vermeiden, kann ich mir vorstellen Etiketten. Etwas wie das:

  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

Wenn dies nun bricht, wenn kein Etikett angehängt ist, wäre es wahrscheinlich sinnvoller, den Labelnamen zurückzugeben, anstatt die Kontrollreferenz:

  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

Dies könnte wahrscheinlich mit einer einzigen Schleife durch die Kontrollsammlung der Option Group geschehen, aber es ist spät! Was scheint kugelsicher zu sein, nicht dass jemand einen Rattenarsch gibt! :)

Wenn es zugänglich ist, denke ich, dass es ist

Formulare! YourFormName! Yourfield.Value

Oder wenn Sie eine Unterform haben, ist es:

Formulare! YourMainForm! Ihre Subform! Ihr Feld.Value

Hier ist ein Code, den ich geschrieben habe, um die mit optionbuttons verbundenen Etiketten umzubenennen. Ein Etikett verfügt über eine übergeordnete Eigenschaft, die auf die Steuerbezeichnungen hinweist. Die Funktion ist ziemlich allgemein, während die Unterroutine für OptionButtons geschrieben wird. Dieser Code sollte für fast alles funktionieren, außer dass ich keine Wiederherstellung bereitgestellt habe, wenn das Etikett nicht zugeordnet ist.

Öffentliche Funktion PanameControllabel (Formname als String, Steuerungsname als Zeichenfolge) als Zeichenfolge dim frm als Form dim CTL als Steuerungsdim -ctllabel als Steuerungsdim ctlparent als Steuerelement

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

Endfunktion Public Sub PanameoptionButtonLabels (Formname als String) Dim frm als Form dim CTL als Kontrolle

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

Wahrscheinlich spät, aber ich hatte nur damit zu kämpfen, und was funktioniert hat, war die Art der Kontrolle, um sicherzustellen, dass sie Etiketten unterstützt und dann verwendet werden

ctl.Properties(3) ' For the label name
Forms(ctl.Form).Controls(ctl.Properties(3)).Caption ' For the label text

Verwenden Sie im unmittelbaren Fenster einen Textindex anstelle der magischen Nummer: ctl.properties("LabelName") hat funktioniert.

Zuerst suchte ich nach dem Etikett unter den Eigenschaften der Textbox und schlug aus. Ich schaute dann unter die Kontrollen der Form und fand sie dort.

Hoffe das hilft jemandem!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top