Как получить доступ к маркировке управления в коде

Heres подобие изображения страница, но для полигонов. Вы могли преобразовать свое изображение в конечное число полигонов на основе цвета и формы, и выполнить их алгоритм на каждом из них.

7
задан Johnny Bones 6 May 2014 в 17:41
поделиться

3 ответа

С текстовым полем вы можете попробовать

Text0.Controls.Item(0).Caption

, где Control 0 - связанная метка

9
ответ дан 6 December 2019 в 12:52
поделиться

TEXTSCAN сам по себе не конвертирует дату, но вы можете вызвать DATENUM только для столбца, который в нем нуждается.

f = fopen('datafile.txt');
data = textscan(f, '%s %f %f %f %f %f %f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(f);
data{1} = datenum(data{1});

вернет массив ячеек data двойных чисел, где первый столбец - datenum MATLAB, соответствующий каждой дате, и каждый другой столбец - соответствующий столбец из файла.

Когда вы перетаскиваете группу параметров в форму с панели инструментов инструментов формы, создается фрейм с прикрепленной меткой, поэтому он будет элементом управления с индексом 0. Но если, например, вы удалите метку по умолчанию, добавьте кнопки выбора и затем добавьте метку, это будет не индекс 0, а индекс .Controls.Count - 1.

Итак, для заголовка метки группы параметров вы либо хотите быть осторожными, если вы удалите метку по умолчанию, вы также удаляете элементы управления внутри фрейма после того, как снова добавляете метку. Если это не так, вам нужно назвать метку и ссылаться на нее по имени, потому что метки для кнопок выбора / переключения являются частью коллекции элементов управления группы переключателей (это меня удивило - я ожидал, что они будут только в элементах управления набор переключателей / опций, к которым они были прикреплены).

Чтобы избежать этой проблемы, Я могу представить запутанный код, в котором вы проходили цикл через коллекцию Controls группы опций в поисках ярлыков, прикрепленных к кнопкам опций / переключателей, а затем повторяли цикл через коллекцию Controls группы опций во второй раз, на этот раз глядя только на ярлыки. Примерно так:

  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

Теперь это прерывается, если метка не прикреплена, поэтому, вероятно, было бы более разумно возвращать имя метки, а не ссылку на элемент управления:

  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

Вероятно, это можно было бы сделать с помощью одного пройти через коллекцию Controls группы опций, но уже поздно! То, что там, похоже, довольно похоже на пуленепробиваемое, хотя, конечно, никому не наплевать! :)

а затем перебрали коллекцию Controls группы переключателей второй раз, на этот раз глядя только на метки. Примерно так:

  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

Теперь это прерывается, если метка не прикреплена, поэтому, вероятно, было бы более разумно возвращать имя метки, а не ссылку на элемент управления:

  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

Вероятно, это можно было бы сделать с помощью одного пройти через коллекцию Controls группы опций, но уже поздно! То, что там, похоже, довольно похоже на пуленепробиваемое, хотя, конечно, никому не наплевать! :)

а затем перебрали коллекцию Controls группы переключателей второй раз, на этот раз глядя только на метки. Примерно так:

  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

Теперь это прерывается, если метка не прикреплена, поэтому, вероятно, было бы более разумно возвращать имя метки, а не ссылку на элемент управления:

  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

Вероятно, это можно было бы сделать с помощью одного пройти через коллекцию Controls группы опций, но уже поздно! То, что там, похоже, довольно похоже на пуленепробиваемое, хотя, конечно, никому не наплевать! :)

  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

Вероятно, это можно было бы сделать с помощью одного цикла через коллекцию Controls группы опций, но уже поздно! То, что там, похоже, довольно похоже на пуленепробиваемое, хотя, конечно, никому не наплевать! :)

  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

Вероятно, это можно было бы сделать с помощью одного цикла через коллекцию Controls группы опций, но уже поздно! То, что там, похоже, довольно похоже на пуленепробиваемое, хотя, конечно, никому не наплевать! :)

5
ответ дан 6 December 2019 в 12:52
поделиться

Если его доступ, я думаю, это

Forms! YourFormName! YourField.Value

Или, если у вас есть подформа, это:

Forms! YourMainForm! YourSubForm! YourField. Значение

1
ответ дан 6 December 2019 в 12:52
поделиться