Я создал Матрицу кнопок/Ярлыки/Текстовые боксы/Панели программно. Мой вопрос заключается в том, как скрыть этот массив после некоторого события. Есть ли одна команда? как например MyArray.Sum(), который дает вам сумму значений внутри массива. Я попробовал MyArray.Hide(), но не команды для этого. Благодарю.C# Скрытие массива кнопок/надписей/текстовых полей
ответ
Это может работать для вас:
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();
В любом случае, пожалуйста, обновите ваш вопрос более подробно и некоторый код.
извините, но где добавить метод? Я просто новичок в C#. после пространства имен? открытый частичный класс? или публичная форма. –
См. мое редактирование - код идет в новом файле 'FormExtensions.cs'. В вашем классе, где вы хотите вызвать HideAll(), добавьте 'using Extensions;'. –
Я пробовал, но он говорит о нулевой ссылке в «control.Visible = false;» –
Вы можете использовать Array.ForEach
Array.ForEach(MyArray, c => c.Hide());
но foreach
это на самом деле не хуже, и до сих пор работает, если вы измените его в список:
foreach (Control c in MyArray) c.Hide();
Я знал о 'List
@Tim Schmelter В любом случае Что такое .Скрыть()? –
@RahulNikate: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.hide%28v=vs.110%29.aspx –
Вы можете обновить структуру своего пользовательского интерфейса, чтобы добавить свои скрываемые элементы в родительскую панель/контейнер какого-либо типа. Таким образом вам всегда нужно беспокоиться о том, чтобы показать/скрыть родителя, а не отслеживать список.
Если по каким-то причинам вы не хотите использовать обычный для каждого цикла:
//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;
}
Однако это не одно и то же, как
это правильно пространство имен Расширение { открытого статический класс FormExtensions { государственного статическая силы HideAll (это управление [] контроль) { Еогеаспа (управление варом в контрольной группе) { control.Visible = ложь; }} }} пространства имен House_Estimator { общественный частичный класс FormHouseEstimator: Форма { // // общественных FormHouseEstimator() { InitializeComponent(); // код } } } –
Просто используйте 'foreach()' (предпочтительно), или, может быть, 'Select(). ToList()' (злоупотребление, поскольку вы ничего не выбираете). Попробуйте выполнить поиск. – CodeCaster
@CodeCaster Я ненавижу такой метод, как для ... for (i = 1; i <= 100; i ++) {MyArray [i] .Visible = false;}. Нет более короткого метода для этого. –
Какой «такой метод» вы имеете в виду и почему вы его ненавидите? – CodeCaster