Динамическое добавление Panel и RadioButton в Visual Basic - PullRequest
0 голосов
/ 01 декабря 2011

Ребята, я пытаюсь динамически создавать панели, которые заполнены семью переключателями каждая.Я получаю панели, но они заполнены только 1 переключателем каждая.Что я здесь не так делаю?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

Я запутался с этим и вынул раздел Panel и просто использовал RadioButtons, чтобы увидеть, получу ли я семьиз этих.Я могу получить семь, если я смещу их в направлении у (.top), но по какой-то причине он не работает в направлении х (.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)

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

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Вы должны использовать 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
0 голосов
/ 13 сентября 2017

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

0 голосов
/ 01 декабря 2011
  1. с Pan.Height = 48 внутри не будет большого контроля.
  2. Вы добавляете кнопку как на панель, так и на панель управления?
...