Динамическое добавление Panel и RadioButtons в Visual Basic

Ребята, я пытаюсь динамически создавать панели, каждая из которых заполнена семью переключателями. Я получаю панели, но каждая из них заполнена только одним переключателем. Что я здесь делаю неправильно? QuestionQuantity является целым числом и представляет собой переменную, определяющую, сколько панелей я буду создавать. Код находится в функции загрузки формы.

Спасибо,

Dim Pan As Panel
Dim RButton As RadioButton

For x As Integer = 1 To QuestionsQuantity Step 1
        Pan = New Panel
        Pan.Name = "Panel" & Convert.ToString(x)
        Pan.Left = 300
        Pan.Top = 100 + 52 * (x - 1)
        Pan.Height = 48
        Pan.Width = 280
        Pan.BackColor = Color.Coral
        Controls.Add(Pan)

        For y As Integer = 1 To 7 Step 1
            RButton = New RadioButton
            RButton.Name = "RadioButton" & Convert.ToString(x) & Convert.ToString(y)
            RButton.Left = 1 + 30 * (y - 1)
            RButton.Top = 10
            RButton.Text = Convert.ToString(y)
            RButton.CheckAlign = System.Drawing.ContentAlignment.BottomCenter
            RButton.TextAlign = System.Drawing.ContentAlignment.TopCenter
            RButton.UseVisualStyleBackColor = True
            Controls.Add(RButton)
            Pan.Controls.Add(RButton)
        Next
Next

Я возился с этим, вынул раздел «Панель» и просто использовал RadioButtons, чтобы посмотреть, получу ли я семь из них. Я могу получить семь, если я смещу их в направлении y (.top), но по какой-то причине это не работает в направлении x (.left)

For y As Integer = 1 To 7 Step 1
    RButton = New RadioButton
    RButton.Name = "RadioButton1" & Convert.ToString(y)
    RButton.Left = 20 + (y * 30)
    RButton.Top = 10
    RButton.Text = Convert.ToString(y)
    RButton.CheckAlign = System.Drawing.ContentAlignment.BottomCenter
    RButton.TextAlign = System.Drawing.ContentAlignment.TopCenter
    RButton.UseVisualStyleBackColor = True
    Controls.Add(RButton)
Next

Пожалуйста помогите!

Наконец-то я понял. Проблема заключалась в объявлении размера RadioButton. Это будет слишком большим, если не будет объявлено, даже если я увеличу интервал.

RButton.Size = New System.Drawing.Size(17, 30)

Это решило проблему.


person Patrik    schedule 01.12.2011    source источник


Ответы (3)


Вы должны использовать UserControl, который содержит ваши семь переключателей.

For x As Integer = 1 To QuestionsQuantity
  Dim pan As New QuestionUserControl
  Pan.Name = "Panel" & Convert.ToString(x)
  Pan.Left = 300
  Pan.Top = 100 + 52 * (x - 1)
  Pan.Height = 48
  Pan.Width = 280
  Pan.BackColor = Color.Coral
  Me.Controls.Add(Pan)
Next

Если вы придерживаетесь своего текущего кода, удалите это (вы должны добавить его только на панель):

For y As Integer = 1 To 7
  '// Controls.Add(RButton)
  Pan.Controls.Add(RButton)
Next

Что касается контроля, я предполагаю, что вы недостаточно «правильно»:

Dim leftMark As Integer = 20
For y As Integer = 1 To 7
  '// code
  RButton.Left = leftMark
  '//code

  leftMark += rButton.Width + 4
Next
person LarsTech    schedule 01.12.2011

  1. с Pan.Height = 48 внутри не будет много элементов управления.
  2. Вы добавляете кнопку как на панель, так и на элементы управления?
person GameAlchemist    schedule 01.12.2011
comment
Хорошо, я вижу первую радиокнопку. Остальные будут справа, потому что я увеличиваю RButtin.Left на 30. Я думаю, мне сначала нужно добавить их в элемент управления, а затем назначить их на панель?! - person Patrik; 01.12.2011
comment
Мой плохой. Возможно, есть конфликт между .Left и .Align ваших кнопок. - person GameAlchemist; 01.12.2011
comment
Я запускал его сам по себе и манипулировал кодом. Я изменил .top вместо .left и получил семь переключателей друг под другом. Что-то не так с .left - person Patrik; 01.12.2011

Поместите радиокнопки в gridbox. Вы можете динамически добавлять ряды радиокнопок по своему желанию. Если это сработает для вас, я пришлю пример кода, когда вернусь домой.

person Jake Pangan    schedule 13.09.2017