Member 11856456 Ответов: 1

Как динамически разместить радиокнопки с текстом на форме?


Я пытаюсь динамически добавлять радио-кнопки, основанные на высоте прежние компонента RadioButton.

dim rbl as new radio button

 rb.Location = New Point(100, 300)
me.controls.add(rbl)


Итак, допустим, я добавляю еще один переключатель в форму
рбл1.Местоположение = Новая Точка(100, 330)
me.controls.add(rbl1)

как мне использовать высоту текста переключателей prvious для динамического разделения кнопок?

Что я уже пробовал:

rbl1.Location = New Point(100, 330 + rbl.height)
но он перекрывает другие rabiobuttons.

1 Ответов

Рейтинг:
1

Bryian Tan

Не совсем понятно, как именно код динамически добавляет переключатель в форму. Что-то не так с математикой. предположим, что высота равна 24, здесь выход. Вы видите проблему? Третий должен быть 330 + (2 * высота) ...

Первая контрольная позиция (100, 330)
Вторая контрольная позиция (100, 330 + 24)
Третье положение управления (100, 330 + 24)
Четвертая Контрольная позиция (100, 330 + 24)
...

Вот вам пример. Код сначала получит количество элементов управления, добавленных в форму, а затем вызовет метод для создания элемента управления RadioButton, передав точки и количество элементов управления.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim radioButtonList = Me.GetAllControls(Me).OfType(Of RadioButton)().ToList()
        Dim radioButtonCount As Integer = 1

        For Each item As RadioButton In radioButtonList
            If (item.Name.Contains("SomeDynamicRb")) Then
                radioButtonCount = radioButtonCount + 1
            End If
        Next

        If radioButtonCount = 0 Then
            radioButtonCount = 1
        End If

        AddRadiobutton(100, 100, radioButtonCount)

    End Sub

    Sub AddRadiobutton(ByVal x As Integer, ByVal y As Integer, ByVal count As Integer)
        Dim rbl As New RadioButton
        If (count = 1) Then
            rbl.Location = New Point(x, y)
        Else
            rbl.Location = New Point(x, y + ((count - 1) * rbl.Height))
        End If

        rbl.Text = "Radio Button " + count.ToString()
        rbl.Name = "SomeDynamicRb_" + count.ToString()
        Me.Controls.Add(rbl)
    End Sub

    Private Function GetAllControls(control As Control) As IEnumerable(Of Control)
        Dim controls = control.Controls.Cast(Of Control)()
        Return controls.SelectMany(Function(ctrl) GetAllControls(ctrl)).Concat(controls)
    End Function


.net - как получить все элементы управления текстовым полем формы - переполнение стека[^]