Как я могу сделать это правильно в C # (сжатый код) - PullRequest
0 голосов
/ 24 октября 2018

Я ужасно плохо разбираюсь в программировании, и все, что я знаю, я узнал из поиска в Google.

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

Вот мой код,

if (metroButton2.Text == "Check All")
{
    metroCheckBox1.CheckState = CheckState.Checked;
    metroCheckBox2.CheckState = CheckState.Checked;
    //Insert 58 Lines
    metroCheckBox61.CheckState = CheckState.Checked;
    metroCheckBox62.CheckState = CheckState.Checked;
    metroButton2.Text = "Uncheck All";
    metroTabPage1.Focus();
}
else if (metroButton2.Text == "Uncheck All")
{
    metroCheckBox1.CheckState = CheckState.Unchecked;
    metroCheckBox2.CheckState = CheckState.Unchecked;
    //Insert 58 Lines
    metroCheckBox61.CheckState = CheckState.Unchecked;
    metroCheckBox62.CheckState = CheckState.Unchecked;
    metroButton2.Text = "Check All";
    metroTabPage1.Focus();
}

Пожалуйста, и спасибо заваше время.

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

То, что я пытаюсь сделать, это сжать все это

            if (metroButton2.Text == "Uncheck All")
            {
                metroCheckBox1.CheckState = CheckState.Unchecked;
                metroCheckBox2.CheckState = CheckState.Unchecked;
                metroCheckBox3.CheckState = CheckState.Unchecked;
                metroCheckBox4.CheckState = CheckState.Unchecked;
                metroCheckBox5.CheckState = CheckState.Unchecked;
                metroCheckBox6.CheckState = CheckState.Unchecked;
                metroCheckBox7.CheckState = CheckState.Unchecked;
                metroCheckBox8.CheckState = CheckState.Unchecked;
                metroCheckBox9.CheckState = CheckState.Unchecked;
                metroCheckBox10.CheckState = CheckState.Unchecked;
                metroCheckBox11.CheckState = CheckState.Unchecked;
                metroCheckBox12.CheckState = CheckState.Unchecked;
                metroCheckBox13.CheckState = CheckState.Unchecked;
                metroCheckBox14.CheckState = CheckState.Unchecked;
                metroCheckBox15.CheckState = CheckState.Unchecked;
                metroCheckBox16.CheckState = CheckState.Unchecked;
                metroCheckBox17.CheckState = CheckState.Unchecked;
                metroCheckBox18.CheckState = CheckState.Unchecked;
                metroCheckBox19.CheckState = CheckState.Unchecked;
                metroCheckBox20.CheckState = CheckState.Unchecked;
                metroCheckBox21.CheckState = CheckState.Unchecked;
                metroCheckBox22.CheckState = CheckState.Unchecked;
                metroCheckBox23.CheckState = CheckState.Unchecked;
                metroCheckBox24.CheckState = CheckState.Unchecked;
                metroCheckBox25.CheckState = CheckState.Unchecked;
                metroCheckBox26.CheckState = CheckState.Unchecked;
                metroCheckBox27.CheckState = CheckState.Unchecked;
                metroCheckBox28.CheckState = CheckState.Unchecked;
                metroCheckBox29.CheckState = CheckState.Unchecked;
                metroCheckBox30.CheckState = CheckState.Unchecked;
                metroCheckBox31.CheckState = CheckState.Unchecked;
                metroCheckBox32.CheckState = CheckState.Unchecked;
                metroCheckBox33.CheckState = CheckState.Unchecked;
                metroCheckBox34.CheckState = CheckState.Unchecked;
                metroCheckBox35.CheckState = CheckState.Unchecked;
                metroCheckBox36.CheckState = CheckState.Unchecked;
                metroCheckBox37.CheckState = CheckState.Unchecked;
                metroCheckBox38.CheckState = CheckState.Unchecked;
                metroCheckBox39.CheckState = CheckState.Unchecked;
                metroCheckBox40.CheckState = CheckState.Unchecked;
                metroCheckBox41.CheckState = CheckState.Unchecked;
                metroCheckBox42.CheckState = CheckState.Unchecked;
                metroCheckBox43.CheckState = CheckState.Unchecked;
                metroCheckBox44.CheckState = CheckState.Unchecked;
                metroCheckBox45.CheckState = CheckState.Unchecked;
                metroCheckBox46.CheckState = CheckState.Unchecked;
                metroCheckBox47.CheckState = CheckState.Unchecked;
                metroCheckBox48.CheckState = CheckState.Unchecked;
                metroCheckBox49.CheckState = CheckState.Unchecked;
                metroCheckBox50.CheckState = CheckState.Unchecked;
                metroCheckBox51.CheckState = CheckState.Unchecked;
                metroCheckBox52.CheckState = CheckState.Unchecked;
                metroCheckBox53.CheckState = CheckState.Unchecked;
                metroCheckBox54.CheckState = CheckState.Unchecked;
                metroCheckBox55.CheckState = CheckState.Unchecked;
                metroCheckBox56.CheckState = CheckState.Unchecked;
                metroCheckBox57.CheckState = CheckState.Unchecked;
                metroCheckBox58.CheckState = CheckState.Unchecked;
                metroCheckBox59.CheckState = CheckState.Unchecked;
                metroCheckBox60.CheckState = CheckState.Unchecked;
                metroCheckBox61.CheckState = CheckState.Unchecked;
                metroCheckBox62.CheckState = CheckState.Unchecked;
                metroButton2.Text = "Check All";
                metroTabPage1.Focus();
            }

Все, что у меня есть, работает идеально, как есть, я просто хотел бы знать, как сжать все это, так, как я просил, я видел, как это делается на других языках, нужно ли мне сделатьстрока первая и выполнить это?я хочу выполнить один небольшой блок кода, который снимет галочку с каждого из этих полей.Если бы я мог просто получить простой пример, такой как

if (1<2)
{
    for (int i = 1; i < 62; i++)
    {
        var myVariable = i;
        metroCheckBox["myVariable"].CheckState = CheckState.Unchecked;
    }
}

, я бы очень хотел выяснить, как сделать что-то подобное

Пожалуйста, и спасибо.

Также,Я использую приложение Windows Form для этого, я не знаю, если это поможет, мне кажется, что это базовая вещь, которую я спрашиваю, я просто слишком глуп, чтобы найти ответ сам.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Создайте поле в своем классе для хранения ссылки на все элементы управления, которые вы хотите переключать вместе (обратите внимание, что вы можете сделать это несколько раз, если хотите иметь функциональность стиля «Все в этой группе», а также «Все»"):

private List<CheckBox> _allCheckboxes;

Затем заполните его один раз.Обычно сразу после того, как InitialiseComponents был вызван, это хорошая точка:

_allCheckBoxes = new List<CheckBox>{
  metroCheckBox1,
  metroCheckBox2,
  /* ... */
};

В альтернативном варианте, если это действительно все CheckBox элементы управления в форме, что-то вроде этого должно сделать:

_allCheckBoxes = this.Controls.OfType<CheckBox>().ToList();

(с использованием LINQ) должно сработать).

Теперь, когда вы хотите переключить все элементы управления, вы можете использовать оператор foreach для перебора каждого элемента управления и установки его *Свойство 1015 * (и обратите внимание, что нам больше не нужно знать, что, например, 62 элемента, если мы используем foreach)

0 голосов
/ 24 октября 2018

Чтобы показать, что, по словам Гвидо, для доступа к ним в подпанелях, очень простой подход:

            if (c is CheckBox && c.Name.StartsWith("metroCheck"))
            {
                ((CheckBox)c).CheckState = CheckState.Checked;
            }
            else if (c.HasChildren)
            {
                foreach (Control cc in c.Controls)
                {
                    if (cc is CheckBox && cc.Name.StartsWith("metroCheck"))
                    {
                        ((CheckBox)cc).CheckState = CheckState.Checked;
                    }
                }
            }

Спасибо, Гвидо

0 голосов
/ 24 октября 2018

Вы можете установить и снять все флажки флажка, как показано ниже

Для проверки

foreach(Control control in this.Controls)
{
     if(control.GetType() == typeof(CheckBox) && control.Name.Contains("metroCheckBox"))
     {
          ((CheckBox)control).CheckState = CheckState.Checked;
     }
}

Для отмены проверки

foreach(Control control in this.Controls)
{
     if(control.GetType() == typeof(CheckBox) && control.Name.Contains("metroCheckBox"))
     {
          ((CheckBox)control).CheckState = CheckState.Unchecked;
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...