1

フォームコンストラクターで、ラジオボタンを含むパネルの配列(以下のコードではpnl_)を生成します。フォームを視覚化すると、パネルのみが表示され、内部のラジオボタンは表示されません。不思議なことに、パネルを1つだけ生成すると、すべてがOKになります(以下のコードのpnl )。

public partial class Radiobuttons_on_Panel : Form
{
    private Panel pnl = new Panel();
    private RadioButton rbtn1 = new RadioButton();
    private RadioButton rbtn2 = new RadioButton();

    private Panel[] pnl_ = new Panel[7];
    private RadioButton[] rbtn1_ = new RadioButton[7];
    private RadioButton[] rbtn2_ = new RadioButton[7];

    public Radiobuttons_on_Panel()
    {
        InitializeComponent();

        pnl.Location = new Point(10, 10);
        pnl.Size = new Size(100, 100);
        pnl.BorderStyle = BorderStyle.FixedSingle;

        rbtn1.Location = pnl.Location;
        rbtn1.Text = "AAA";

        rbtn2.Location = new Point(pnl.Location.X, pnl.Location.Y + rbtn1.Height);
        rbtn2.Text = "BBB";

        pnl.Controls.Add(rbtn1);
        pnl.Controls.Add(rbtn2);
        this.Controls.Add(pnl);

        for (int i = 0; i < pnl_.Length; i++)
        {
            pnl_[i] = new Panel();
            pnl_[i].BorderStyle = BorderStyle.FixedSingle;
            pnl_[i].Size = new Size(100, 100);
            pnl_[i].Location = new Point(10 + i * 110, 200);

            rbtn1_[i] = new RadioButton();
            rbtn1_[i].Location = pnl_[i].Location;
            rbtn1_[i].Text = "AAA";

            rbtn2_[i] = new RadioButton();
            rbtn2_[i].Location = new Point(pnl_[i].Location.X, pnl_[i].Location.Y + rbtn1_[i].Height);
            rbtn2_[i].Text = "BBB";

            pnl_[i].Controls.Add(rbtn1_[i]);
            pnl_[i].Controls.Add(rbtn2_[i]);

            this.Controls.Add(pnl_[i]);
        }
    }
}

問題はどこだ?

4

1 に答える 1

1

これに関する問題は、場所の計算が間違っていることです。ラジオ ボタンの位置は、そのコンテナー (この場合はパネル) に対して相対的です。場所を

rbtn1_[i] = new RadioButton();
rbtn1_[i].Location = new Point(10, 10);
rbtn1_[i].Text = "AAA";

rbtn2_[i] = new RadioButton();
rbtn2_[i].Location = new Point(rbtn1_[i].Location.X, rbtn1_[i].Location.Y + rbtn1_[i].Height);
rbtn2_[i].Text = "BBB";

ボタンは希望どおりに配置されます。

ラジオボタンの位置の値がパネルに表示されるほど小さいため、最初のものでうまくいきます。それらの他のものについては、まあ、それらは親パネルの境界の外にあります。

要するに、プロパティは、それが a であるか aLocationであるかに関係なく、常にコンテナーに対して相対的であるということです。パネルの値は に対して相対的ですが、ラジオ ボタンの値は、それらが含まれるどのパネルに対しても相対的です。PanelFormLocationFormLocation

MSDN リファレンス: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.location.aspx

于 2012-09-12T15:34:41.090 に答える