2017-03-16 28 views
1

Ich habe winform auf denen dynamisch 52 Radio-Buttons erstellt werden. Dies ist Methode für sie zu schaffen:Einstellung Anker für dynamisch erstellte Steuerelemente

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]);    
     }   

    } 

Es gibt ein Problem, wenn das Formular maximiert wird. Optionsfelder verschwinden. Wenn ich

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

Die Radiotasten eingestellt werden überschichtet.

Was kann ich tun, um ihre Position am selben Ort zu behalten, wenn die Größe der Maske geändert wird?

+0

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

Antwort

1

diese beiden Linien

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

bedeuten, dass Ankerwert AnchorStyles.Left wird von AnchorStyles.Bottom

AnchorStyles ersetzt hat Flags Attribut gesetzt, enum-Werte kombiniert werden können:

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

wenn gesetzt via Designer, in "Windows Form Designer generiertem Code" sieht es so aus:

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

Ich habe das schon versucht, aber nicht geholfen. – Josef

+1

@Josef, vielleicht ist die 'y'-Koordinate zu groß ('int y = 520;')? Wenn die Höhe des übergeordneten Steuerelements (xtraTab) kleiner als 520 ist, befinden sich alle Optionsschaltflächen außerhalb seiner Grenzen. Wenn der Anker auf Unten gesetzt ist, werden sie nach unten verschoben, wenn die Größe des übergeordneten Elements geändert wird. Versuchen Sie, y auf einen kleineren Wert zu ändern, oder versuchen Sie Anchor = Left | Oben und Größe ändern – ASh

+0

Nun sind die Optionsfelder nicht mehr überlagert, aber nach der Größenänderung verschwinden sie. Die Y-Position muss leider 520 sein, da die Design-Anforderung Radiobuttons im unteren Bereich aller anderen Steuerungen haben muss. – Josef

Verwandte Themen