【问题标题】:Dynamically adding Panel and RadioButtons in Visual Basic在 Visual Basic 中动态添加面板和单选按钮
【发布时间】:2011-12-01 18:38:09
【问题描述】:

伙计们,我正在尝试动态创建面板,每个面板都填充有七个单选按钮。 我得到了面板,但每个面板只填充了 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

我把它弄乱了,拿出了面板部分,只是使用了 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)

这解决了问题。

【问题讨论】:

    标签: vb.net radio-button panel


    【解决方案1】:

    您应该使用包含七个单选按钮的 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
    

    【讨论】:

      【解决方案2】:
      1. 如果 Pan.Height = 48,内部不会有太多控件。
      2. 您将按钮同时添加到面板和控件中?

      【讨论】:

      • 好吧,我看到了第一个单选按钮。其他人将在右侧,因为我将 RButtin.Left 增加了 30。我想我首先必须将它们添加到控件,然后将它们“分配”到面板?!
      • 我的错误。也许你的按钮的 .Left 和 .Align 之间存在冲突。
      • 我自己运行它并操作了代码。我更改了 .top 而不是 .left 并且我在彼此下方得到了七个单选按钮。 .left 出了点问题
      【解决方案3】:

      将单选按钮放在网格框中。您可以根据需要动态添加单选按钮行。如果这对你有用,我回家后会发送一个示例代码。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2013-10-27
        • 2012-04-23
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        相关资源
        最近更新 更多