Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > узнать значение в цикле


Автор: AGENTxXx 8.2.2010, 16:42
Всем привет! Вот такой вопрос. Знаю что есть такая возможность проверить в цикле значение разных компонентов: т.е. есть например radiobutton1,radiobutton2,radiobutton3,radiobutton4 и я хотел бы в цикле узнать у кого стоит в Checked значение true. Кто ни будь знает как это реализовать. Должно вроде быть типа такого:
Код

string vsp="";
int i = 1;
while (vsp=="")
            {
                if (radiobutton[i].Checked==true)
                    vsp = i.ToString();
                i++;
            }

Точно конечно не знаю есть ли возможность в C# но в actionScript точно можно

Автор: KelTron 8.2.2010, 18:23
Если просто перебор:
Код

foreach (var btn in this.Controls.OfType<RadioButton>())
{
    if (btn.Checked) 
    {
        //...
    }
}


Если обязательно нужен индекс:
Код

var btns = this.Controls.OfType<RadioButton>().ToArray();
for (int i = 0; i < btns.Length; ++i)
{
    if (btns[i].Checked)
    {
        //...
    }
}

Хотя наверно тебе нужно вот это:
Код

var rBtn = this.Controls.OfType<RadioButton>().Single(r => r.Checked);


Автор: AGENTxXx 8.2.2010, 19:10
KelTron, незнаю как у тебя, но у меня не хочет робить. В первом случаи и во 2м ни заходит ни куды (имеетсы ввиду все время false) а 3й способ не понял как переменить. Как хоть такая система (вид поиска) называется, я может в книгах еше поищу. Просто вообще даже не знаю что в гугл писать правильно(( 

Автор: KelTron 9.2.2010, 05:27
Я написал для случая если кнопки лежат на форме и этот код вызывается в одном из её методов. Если они лежат в другом контейнере, например, на панели, то нужно изменить код:
Код

this.panel.Controls

Цитата(AGENTxXx @  8.2.2010,  19:10 Найти цитируемый пост)
все время false

Значит ничего не выбрано..)

Цитата(AGENTxXx @  8.2.2010,  19:10 Найти цитируемый пост)
3й способ не понял как переменить

А что тут понимать, в переменной rBtn будет радиобаттон, который выбран.

Автор: AGENTxXx 9.2.2010, 13:30
Кнопки находятся в GroupBoxе. Но я думаю он ни какого влияния не дает, так как в свойствах GroupBoxа не описаны радио баттоны(( Может как будет время скинешь пример? Я сейчас еще попробую код поизменять, может получится. Если получится, отпишусь!

Автор: KelTron 9.2.2010, 15:14
Цитата(AGENTxXx @  9.2.2010,  13:30 Найти цитируемый пост)
 так как в свойствах GroupBoxа не описаны радио баттоны

И с чего бы им там быть, у него есть коллекция Controls, там и надо искать. 

Цитата(KelTron @  9.2.2010,  05:27 Найти цитируемый пост)
Если они лежат в другом контейнере, например, на панели, то нужно изменить код:код C#1:this.panel.Controls

Это я для кого написал?

В твоём случае будет this.groupBox.Controls

Автор: AGENTxXx 9.2.2010, 17:06
Извини, что сразу не попробовал, вот так у меня получилось:
Код

var btns = this.groupBox2.Controls.OfType<RadioButton>().ToArray();


Так заработало, только вот последовательность какая то странная... 1й это 3, а 4й это 0.. Ну эт фигня в общем, главное что получилось. Спасибо большое! Если не сложно можешь посоветовать книгу или адрес кто про контролы почитать?

Автор: KelTron 9.2.2010, 18:02
Цитата(AGENTxXx @  9.2.2010,  17:06 Найти цитируемый пост)
1й это 3, а 4й это 0

Если нужно просто узнать какой номер выбран то проще сделать так:
Либо в дизайнере, либо в конструкторе формы, установить свойства Tag у кнопок:
Код

public Form1()
{
    InitializeComponent();
    this.radioButton1.Tag = 1;
    this.radioButton2.Tag = 2;
    this.radioButton3.Tag = 3;
    this.radioButton4.Tag = 4;
}

А потом в одно действие узнаём номер кнопки:
Код

int selNum = this.groupBox2.Controls.OfType<RadioButton>()
    .Where(r => r.Checked)
    .Select(r => (int)r.Tag)
    .Single();


Цитата(AGENTxXx @  9.2.2010,  17:06 Найти цитируемый пост)
книгу или адрес кто про контролы почитать

Например, Петцольд:
http://oz.by/books/more1025356.html
http://nnm.ru/blogs/s1pan/programmirovanie_dlya_microsoft_windows_na_c_tom_1_2_petcold/

Автор: AGENTxXx 9.2.2010, 20:44
Хотел репутацию тебе поднять но увы.... говорят постов не хватает. 2 ссылка очень заинтересовала, а вот на 2й я уже имею эти книги в электронном. С удовольствием бы купил 1й книгу, но интернет магазинам как то не доверяю, а у себя в городе незнаю где найти(( недавно искал, дак в некторых вообще ни каких нет по C#(( 

Автор: KelTron 9.2.2010, 22:07
Цитата(AGENTxXx @  9.2.2010,  20:44 Найти цитируемый пост)
незнаю где найти((

В электронном сто пудов должна быть. У меня, правда, она в бумажном..)

Цитата(AGENTxXx @  9.2.2010,  20:44 Найти цитируемый пост)
говорят постов не хватает

Можно модератора попросить..))

Автор: Heinzz 9.2.2010, 23:15
Цитата(AGENTxXx @  9.2.2010,  20:44 Найти цитируемый пост)
 интернет магазинам как то не доверяю

я постоянно покупаю через интернет, проблем не было, доставка почтой, платишь там же при получении

Автор: AGENTxXx 9.2.2010, 23:37
Какие тобой проверены?

Автор: wester 9.2.2010, 23:56
AGENTxXx, 
я думаю продолжение разговора о магазинах лучше устроить в личке
ЗЫ мной проверен Озон - раз 5 заказывал всякую редкую мелочевку, в том числе книги

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)