2015-04-09 2 views
0

У меня есть winform (VisualStudio 2013, C#) с несколькими типами объектов. Я хочу изменить свойство (видимость) во всех объектах одного типа. Вот моя формулировка:Изменение переменной foreach для определенного объекта в элементах управления (C#)

private void offToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    GroupBox v = (GroupBox)sender; 
    foreach (Control g in Controls) 
    { 
     GroupBox v = (GroupBox)g; 
     g.Visible = false; 
    } 
} 

Проблема, Visual Studio посылает мне это сообщение, когда я хочу, чтобы начать свою форму:

Ошибка 1: локальная переменная с именем «v» не может быть объявлен в этом scope , потому что это придало бы значение «v», значение которого уже , используемое в области «родительский или текущий» для обозначения чего-то еще. E: \ 3D Tic Tac Toe - druhá verze \ 3D Tic Tac Toe - druhá verze \ Form1.cs 2203 26 3D Tic Tac Toe - druhá verze

Независимо от того, что сообщение говорит, я не использую переменную v нигде в программе. Вероятно, я ищу какой-то обработчик исключений.

Спасибо! :-)

+1

посмотрите на это 'GroupBox V = (GroupBox) отправителя;' и это 'GroupBox v = (GroupBox) г; ' – Jehof

ответ

2

Вы определили v дважды в текущей области видимости:

**GroupBox v = (GroupBox)sender;** 
foreach (Control g in Controls) 
{ 
    **GroupBox v = (GroupBox)g;** 
    g.Visible = false; 
} 

Похоже, что вы пытаетесь скрыть все элементы управления в Groupbox? Если это так, я бы изменить код, чтобы что-то вроде этого:

foreach (Control ctrl in groupBox.Controls) 
{ 
    ctrl.Visible = false; 
} 

Или, если вам нужно, чтобы скрыть все GroupBox типов:

foreach (Control ctrl in this.Controls) 
{ 
    if(ctrl.GetType() == typeof(GroupBox)) 
     ctrl.Visible = false; 
} 

Или, чтобы скрыть все элементы управления на форме:

foreach (Control ctrl in this.Controls) 
{ 
    ctrl.Visible = false; 
} 
0
-> GroupBox v = (GroupBox)sender; 
foreach (Control g in Controls) 
{ 
    -> GroupBox v = (GroupBox)g; 
    g.Visible = false; 
} 

Вы также можете изменить свой цикл на это:

foreach (GroupBox g in Controls) 
1

Вы используете переменную v за пределами вашего цикла: GroupBox v = (GroupBox)sender;

Таким образом, в цикле вы не можете использовать v имя переменной снова, как она уже присутствует в текущей области.

Но обратите внимание: на самом деле вам не нужна эта строка GroupBox v = (GroupBox)g; в цикле вообще, так как вы не используете переменную v в вашей петле.

ОБНОВЛЕНИЕ.

С этой части досье: Возможно, я искал какой-то обработчик исключений. - не совсем понятно, что вы просите. Вам не нужен обработчик исключений для обработки такого рода ошибок, так как он равен время компиляции ошибка, а не время выполнения.

0

Я немного смущен вашим вопросом, так как ваш код, скорее всего, вызовет другие ошибки.

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

private void offToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    GroupBox v = (GroupBox)sender; 

    foreach (Control g in Controls) 
    { 
     if (g is GroupBox) // only if g is a GroupBox set Visible to false 
      g.Visible = false; 
    } 
} 
Смежные вопросы