流程布局面板总体C#

流程布局面板总体C#,c#,flowlayoutpanel,C#,Flowlayoutpanel,我试图用组合框和numbericupdown填充一个Flow布局面板。 我遇到的问题是在新的组合框中同时使用新的numbericupdown。下面是我如何生成组合框和数字设置的 // This int increments each time the code is run. It's located outside of the method below. int captchaID = 0; //仅用于UI的文本框,没有基于文本输入的代码交互。 string textboxText=“c

我试图用组合框和numbericupdown填充一个Flow布局面板。 我遇到的问题是在新的组合框中同时使用新的numbericupdown。下面是我如何生成组合框和数字设置的

// This int increments each time the code is run. It's located outside of the method below.
int captchaID = 0;

//仅用于UI的文本框,没有基于文本输入的代码交互。
string textboxText=“captchaTextbox”;
TextBox newTextbox=新的TextBox();
newTextbox.Name=captchaID.ToString()+textboxText;
newTextbox.Text=“”;
newTextbox.Width=175;
itemFlowPanel.Controls.Add(newTextbox);
//组合框
字符串comboBoxText=“captchaComboBox”;
ComboBox newComboBox=新ComboBox();
newComboBox.Name=captchaID.ToString()+comboBoxText;
新框。宽度=50;
newComboBox.DropDownStyle=ComboBoxStyle.DropDownList;
itemFlowPanel.Controls.Add(新框);
//此数组保存添加到每个组合框中的字符串
字符串[]技能=新字符串[6];
技能[0]=“STR”;
技能[1]=“DEX”;
技能[2]=“CON”;
技能[3]=“INT”;
技能[4]=“WIS”;
技能[5]=“CHA”;
//这个for循环只是用数组填充我的组合框。
for(int i=0;i
使用当前代码,我能够编辑每个NumericUpDown包含的EventHandler,但我还没有找到一种方法使其能够读取相应的combobox(与captchaID一起递增)


我希望能够为每个事件创建一个新的唯一事件,但如果不可能,检查组合框ID的方法也会有所帮助。

您可以重写
captchaNumericUpDown\u
事件,将
组合框作为附加参数,然后像这样调用它们:

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;
    ...
}

不确定我是否理解正确,但您可以使用
ComboBox
NumericUpDown
控件的
Tag
来保存链接控件的实例,这样您就可以从标记相关控件中提取并检查其值。另一个选项是将添加的控件存储在集合(
Dictionary
?)中,并通过使用键查找获得链接控件。@Sinatr我尝试了标记,但我不知道如何将combobox标记与NumericUpDown标记匹配。我使用(sender as NumericUpDown)获取NumericUpDown。标记,但我不能使用组合框,因为它不是发件人。如果您获取
var NumericUpDown=(NumericUpDown)sender,然后:
var comboBox=(comboBox)numericUpDown.Tag
@Sinatr我如何使用这些来查找组合框中与活动数字UpDown具有相同标记的所选索引?我对这段代码的实际用途/使用位置有点困惑。它看起来比我实际使用的要先进一点。你能给我一个简单的例子吗?
(sender,args)=>{some code}
是一个表示匿名
EventHandler
,我将其添加到
ValueChanged
事件中。如果您不熟悉该概念,以下链接可能会很有用:
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;
    ...
}
    // 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;
    ...
}