2017-03-16 134 views
1

我有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) –

回答

1

這兩行

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