繁体   English   中英

流程布局面板填充C#

[英]Flow Layout Panel Population C#

我正在尝试使用ComboBoxes和NumbericUpDowns填充流布局面板。 我遇到的问题是同时使用新的NumbericUpDowns和新的ComboBoxes。 这是我生成ComboBoxes和NumericUpDowns的方式。

// 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++;

使用当前代码,我可以编辑每个NumericUpDown包含的EventHandler,但是我还没有找到一种使它能够读取其对应组合框(与captchaID一起递增)的方法。

我想做的是为每个事件创建一个新的唯一事件,但是如果不可能,那么一种检查组合框ID的方法也将有所帮助。

您可以重写captchaNumericUpDown_事件以将ComboBox作为附加参数,然后像这样调用它们:

newNumericUpDown.ValueChanged += (sender, args) =>
{
    captchaNumericUpDown_Click(sender, args, newComboBox);
}

以下是快速解决方案:

1)使用字典

Dictionary<NumericUpDown, ComboBox> _controls = new Dictionary<NumericUpDown, ComboBox>();

    // when you create comboBox - add entry with associated numericUpDown
    _controls.Add(numericUpDown1, comboBox1);

// now in the numericUpDown event you can get combobox like this
void numericUpDown_Whatever(object sender, WhateverEventArgs e)
{
    var numericUpDown = (NumericUpDown)sender;
    var comboBox = _controls[numericUpDown];
    // do something
    var selectedIndex = comboBox.SelectedIndex;
    ...
}

2)通过使用Tag

    // add combobox into numericUpDown Tag when you create them
    numericUpDown1.Tag = comboBox1;

// now in the numericUpDown event you can get combobox like this
void numericUpDown_Whatever(object sender, WhateverEventArgs e)
{
    var numericUpDown = (NumericUpDown)sender;
    var comboBox = (CombBox)numericUpDown.Tag;
    // do something
    var selectedIndex = comboBox.SelectedIndex;
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM