动态创建控件的设置锚

动态创建控件的设置锚

问题描述:

我有winform动态创建52个单选按钮。 这是他们创造的方法:动态创建控件的设置锚

private void CreateRadioButton() 
    {    
     int rbCount = 52; 
     int numberOfColumns = 23; 

     radioButtons = new RadioButton[rbCount]; 
     int y = 520; 

     for (int i = 0; i < rbCount; i++) 
     { 
      radioButtons[i] = new RadioButton(); 
      radioButtons[i].Text = Convert.ToString(i + 1); 

      if (i % numberOfColumns == 0) 
       y += 20; 

      var x = 11 + i % numberOfColumns * 50; 

      radioButtons[i].Location = new Point(x, y); 
      radioButtons[i].Size = new Size(40, 15); 
      //radioButtons[i].Anchor = AnchorStyles.Left; 
      //radioButtons[i].Anchor = AnchorStyles.Bottom; 
      radioButtons[i].Font = new Font(radioButtons[i].Font.FontFamily, 8, FontStyle.Bold); 
      radioButtons[i].UseVisualStyleBackColor = true; 
      radioButtons[i].Click += new EventHandler(rbtns_click); 

      xtraTab.Controls.Add(radioButtons[i]);    
     }   

    } 

当窗体最大化有问题。单选按钮消失。 如果我设置

radioButtons[i].Anchor = AnchorStyles.Left; 
radioButtons[i].Anchor = AnchorStyles.Bottom; 

单选按钮被覆盖。

如果表单被调整大小,我能做些什么来保持他们在同一个地方的位置?

+0

['[FlagsAttribute] public enum AnchorStyles'](https://msdn.microsoft.com/en-us/library/system.windows.forms.anchorstyles(v = vs.110).aspx) –

这两行

radioButtons[i].Anchor = AnchorStyles.Left; 
radioButtons[i].Anchor = AnchorStyles.Bottom; 

意味着锚值AnchorStyles.Left将由AnchorStyles.Bottom

AnchorStyles更换已Flags属性集,枚举值可以被组合:

radioButtons[i].Anchor = AnchorStyles.Left | AnchorStyles.Bottom; 

如果通过设置设计器,在“Windows窗体设计器生成的代码”中,它看起来像这样:

this.radioButton1.Anchor = ((System.Windows.Forms.AnchorStyles) 
    ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 
+0

我已经试过这个,但没有帮助。 – Josef

+1

@Josef,也许开始'y'坐标太大('int y = 520;')?如果父控件(xtraTab)的高度小于520,则所有单选按钮将超出其边界,并且将锚点设置为底部时,父对象调整大小时它们将向下移动,并且仍将超出边界。尝试将y更改为较小的值或尝试Anchor = Left |顶部和调整大小 – ASh

+0

现在单选按钮不再覆盖,但仍然在调整大小后重新调整大小。不幸的是,Y的位置必须是520,因为设计要求是在所有其他控件的底部都有单选按钮。 – Josef