Я новичок в C#, и мне было интересно, как работает groupbox.Controls[i] и / или panel.Controls[i]?
У меня есть панель с кучей кнопок для представления клавиатуры. Я меняю цвет кнопки клавиатуры при нажатии клавиши.
Однако, когда я делаю keyboardPanel.Controls[2].BackColor = Color.Red;, мой пробел становится красным.
Мой пробел - button55 и TabIndex 54. Почему мой пробел становится красным?
@SamiKuhmonen Как он добавил его в качестве третьего элемента управления? Я разместил каждую кнопку, представляющую клавиатуру, по порядку. И как мне изменить контрольный номер / индекс детей?
Вы этого не сделаете. Как я уже сказал, создавайте свою собственную коллекцию в том порядке, в котором вы хотите, чтобы они были, и она всегда будет в порядке. Не полагайтесь на коллекцию Controls.
Используйте Вид> (Другие окна)> Структура документа. Вы увидите кнопки, перечисленные в порядке элементов управления [], которые легко изменить с помощью перетаскивания. Примечательно, что вы не должны беспокоиться об этом, высокое обслуживание, свойство Name или Tag - это достойный способ вернуть элемент управления.





Причина того, что ваш пробел становится красным, проста: keyboardPanel.Controls[2] - это пробел. Обратите внимание, что кнопки не обязательно добавляются в список keyboardPanel.Controls в том порядке, в котором они названы. Значение: keyboardPanel.Controls[1] не обязательно является button1, а также button55 не обязательно является keyboardPanel.Controls[55].
Теперь, если вы хотите извлекать кнопки по имени, вы должны использовать это:
keyboardPanel.Controls.Find("Button55" , true);
где «button55» - это имя этого элемента управления, а истина означает возможность поиска по всем дочерним элементам.
Но я думаю, что есть более простой способ изменить цвет. Использование отправителя:
private void button_Click(object sender, EventArgs e)
{
Control btn = sender as Control;
btn.BackColor = Color.Red;
}
и сделайте этот метод обработчиком событий нажатия всех кнопок.
Обновлено:
Если вы действительно хотите переупорядочить элементы управления в GroupBox, вам следует посетить дизайнера. Самый простой способ добраться до дизайнера - щелкнуть правой кнопкой мыши InitializeComponent() в методе конструктора вашей формы и выбрать «Перейти к определению».
Там вы найдете порядок добавления элементов управления. что-то вроде ниже:
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Controls.Add(this.button3);
this.groupBox1.Controls.Add(this.button1);
В моем случае Controls [0] - это button2, Controls [1] - это button3 и так далее. Вы можете переставить их, как показано ниже:
this.groupBox1.Controls.Add(this.button1);
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Controls.Add(this.button3);
Значит нет возможности изменить контрольный номер? Поскольку в настоящее время я использую KeyDown для подсветки нажатых клавиш, но с помощью keyboarDPanel.Controls [i] загораются все случайные клавиши.
Я отредактировал свой ответ, чтобы показать, как можно переставить элементы управления. Однако мне все еще нужно уточнить, что использование объекта-отправителя - лучший способ.
Потому что он был добавлен к дочерним элементам формы в качестве третьего элемента управления. Индексы вкладок или названия элементов управления не имеют значения. Вы можете создать свою собственную коллекцию с определенными индексами, если они вам понадобятся. Или назовите их правильно и используйте их напрямую.