Я пытаюсь заполнить панель макета потока с помощью ComboBoxes и NumbericUpDowns. Проблема, с которой я столкнулась, заключается в использовании новых NumbericUpDowns с новыми ComboBoxes. Вот как я создаю ComboBoxes и NumericUpDowns.Панель компоновки потока C#
// This int increments each time the code is run. It's located outside of the method below.
int captchaID = 0;
.
// Textboxes that are only for the UI, no code interaction based on text input.
string textboxText = "captchaTextbox";
TextBox newTextbox = new TextBox();
newTextbox.Name = captchaID.ToString() + textboxText;
newTextbox.Text = "";
newTextbox.Width = 175;
itemFlowPanel.Controls.Add(newTextbox);
// Combo Boxes
string comboBoxText = "captchaComboBox";
ComboBox newComboBox = new ComboBox();
newComboBox.Name = captchaID.ToString() + comboBoxText;
newComboBox.Width = 50;
newComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
itemFlowPanel.Controls.Add(newComboBox);
// This array holds my strings that are added to each ComboBox
string[] skills = new string[6];
skills[0] = "STR";
skills[1] = "DEX";
skills[2] = "CON";
skills[3] = "INT";
skills[4] = "WIS";
skills[5] = "CHA";
// This for loop is just populating my ComboBox with the array.
for (int i = 0; i < skills.Length; i++)
{
newComboBox.Items.Add(skills[i]);
}
// Numeric Up Downs
string numericUpDownText = "captchaNumericUpDown";
NumericUpDown newNumericUpDown = new NumericUpDown();
newNumericUpDown.Name = captchaID.ToString() + numericUpDownText;
newNumericUpDown.Width = 50;
newNumericUpDown.ValueChanged += new EventHandler(captchaNumericUpDown_Click);
newNumericUpDown.ValueChanged += new EventHandler(captchaNumericUpDown_ValueChanged);
itemFlowPanel.Controls.Add(newNumericUpDown);
captchaID++;
С текущим кодом, я могу редактировать EventHandler, что каждый NumericUpDown содержит, но я не нашел способ сделать это в состоянии прочитать это соответствующим выпадающее (что приращение вместе с captchaID).
Что бы я хотел сделать, это создать новое уникальное событие для каждого, но если это невозможно, поможет также проверить идентификатор combobox.
Не уверен, что я понял это правильно, но вы можете использовать 'Tag' для управления' ComboBox' или 'NumericUpDown' для хранения экземпляра * связанного * элемента управления, таким образом, в случае, если вы можете извлечь из контроля, связанного с тегом и проверьте его значение. Другим вариантом является сохранение добавленных элементов управления в коллекции ('Dictionary'?) И получение связанного элемента управления с помощью ключевого поиска. – Sinatr
@Sinatr Я пробовал теги, но не могу понять, как сопоставить тег combobox с тегом NumericUpDown. Я получаю NumericUpDown, используя (отправитель как NumericUpDown) .Tag, но я не могу с combobox, поскольку он не отправитель. – Dylan
Если вы получаете 'var numericUpDown = (NumericUpDown) отправитель;', то после этого: 'var comboBox = (ComboBox) numericUpDown.Tag;' – Sinatr