Создать контроль в цикле foreach? - PullRequest
2 голосов
/ 30 декабря 2010

Есть строковый массив, содержащий некоторое местоположение файла.

Я использую цикл foreach, в котором каждый цикл я хочу создать новый элемент управления переключателем.без кода foreach выполняется, но в цикле добавляется только один элемент управления.

Кто-нибудь может сказать мне, почему?и как я это делаю.

Код:

string[] location =
{
    @"C:\Program Files\Skype\Phone\Skype.exe",
    @"C:\Program Files\iTunes\iTunes.exe",
    @"C:\Program Files\Internet Explorer\iexplore.exe"
};

int i = 10;
foreach (string path in location)
{
    if (File.Exists(path))
    {
        RadioButton rbList = new RadioButton();
        rbList.AutoSize = false;
        Icon icn;
        icn = Icon.ExtractAssociatedIcon(path);
        rbList.Image = icn.ToBitmap();
        rbList.Height = 100;
        rbList.Width = 50;
        i = i + 30;
        rbList.Location = new Point(100, i);

        groupBox1.Controls.Add(rbList);
    }
}

Ответы [ 4 ]

2 голосов
/ 30 декабря 2010

Вы устанавливаете высоту на 100, но увеличиваете положение только на 30.

rbList.Height = 100; 
...
i = i + 30;
rbList.Location = new Point(100, i);

Вы можете уменьшить высоту ниже 30:

rbList.Height = 30; //or smaller

или

увеличьте «i» более чем на 100:

i = i + 100; //or more than 100
rbList.Location = new Point(100, i);
0 голосов
/ 30 декабря 2010
int i = 10;
var radios = new[] { "", "", "" }
    .Where(path => File.Exists(path))
    .Select(path => new RadioButton
        {
            AutoSize = false,
            Image = Icon.ExtractAssociatedIcon(path).ToBitmap(),
            Height = 100,
            Width = 50,
            Location = new Point(100, (i = i + 30))
        })
     .ToArray();

groupBox1.Controls.AddRange(radios);
0 голосов
/ 30 декабря 2010

Немного изменений:

i = i + 100;
rbList.Location = new Point(100, i);

groupBox1.Controls.Add(rbList);

int space = 10;
groupBox1.Height += rbList.Height + space;

Эта работа без выравнивания, выравнивание ваше.

0 голосов
/ 30 декабря 2010

Добавить

rbList.AutoSize = true;

И убедитесь, что ваш groupBox1 достаточно велик, чтобы отображать все ваши переключатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...