2015-04-23 4 views
-3

Я создал Матрицу кнопок/Ярлыки/Текстовые боксы/Панели программно. Мой вопрос заключается в том, как скрыть этот массив после некоторого события. Есть ли одна команда? как например MyArray.Sum(), который дает вам сумму значений внутри массива. Я попробовал MyArray.Hide(), но не команды для этого. Благодарю.C# Скрытие массива кнопок/надписей/текстовых полей

+0

Просто используйте 'foreach()' (предпочтительно), или, может быть, 'Select(). ToList()' (злоупотребление, поскольку вы ничего не выбираете). Попробуйте выполнить поиск. – CodeCaster

+0

@CodeCaster Я ненавижу такой метод, как для ... for (i = 1; i <= 100; i ++) {MyArray [i] .Visible = false;}. Нет более короткого метода для этого. –

+0

Какой «такой метод» вы имеете в виду и почему вы его ненавидите? – CodeCaster

ответ

1

Это может работать для вас:

foreach(var x in MyArray) 
{ 
    x.Visible = false; 
} 

Если вы хотите вызвать метод, вы можете создать расширение m еню:

namespace Extensions 
{ 
    public static class FormExtensions 
    { 
     public static void HideAll(this Control[] controls) 
     { 
      foreach(var control in controls) 
      { 
       control.Visible = false; 
      } 
     } 
    } 
} 

Использование:

MyArray.HideAll(); 

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

+0

извините, но где добавить метод? Я просто новичок в C#. после пространства имен? открытый частичный класс? или публичная форма. –

+0

См. мое редактирование - код идет в новом файле 'FormExtensions.cs'. В вашем классе, где вы хотите вызвать HideAll(), добавьте 'using Extensions;'. –

+0

Я пробовал, но он говорит о нулевой ссылке в «control.Visible = false;» –

1

Вы можете использовать Array.ForEach

Array.ForEach(MyArray, c => c.Hide()); 

но foreach это на самом деле не хуже, и до сих пор работает, если вы измените его в список:

foreach (Control c in MyArray) c.Hide(); 
+0

Я знал о 'List .ForEach()', это тоже работает. – CodeCaster

+0

@Tim Schmelter В любом случае Что такое .Скрыть()? –

+0

@RahulNikate: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.hide%28v=vs.110%29.aspx –

0

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

0

Если по каким-то причинам вы не хотите использовать обычный для каждого цикла:

//Create an action that hides your control 
Action<Control> HideControlAction = new Action<int>(HideControl); 
//Call your action on each member of MyArray 
Array.ForEach(MyArray, action); 

Определите метод действия:

private static void HideControl(Control control) 
{ 
     control.Visible = false; 
} 

Однако это не одно и то же, как

+0

это правильно пространство имен Расширение { открытого статический класс FormExtensions { государственного статическая силы HideAll (это управление [] контроль) { Еогеаспа (управление варом в контрольной группе) { control.Visible = ложь; }} }} пространства имен House_Estimator { общественный частичный класс FormHouseEstimator: Форма { // // общественных FormHouseEstimator() { InitializeComponent(); // код } } } –