同一列表C#中的项目之间的交互(获胜形式)



我正在尝试创建一个按钮列表和一个文本框列表,我需要在这些元素之间进行交互。我的意思是,每当我点击按钮时,我都需要对同一行的文本框进行一些操作。我试着在点击事件中使用委托,但我真的找不到指向我想指向的文本框的方法。

private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = true;
openFileDialog.ShowDialog();
string[] files = openFileDialog.FileNames.ToArray();
int index = 0;
List<Button> EditButtons = new List<Button>();
List<TextBox> TextBoxes = new List<TextBox>();
foreach (var file in files)
{
EditButtons.Add(new Button() { Text = "Edit", Top = index +50, Left = 150 });
TextBoxes.Add(new TextBox() { Text = file, Top = index +50, Left = 5 });
index = index + 25;
}
foreach (Button button in EditButtons)
{
Controls.Add(button);
}
foreach (TextBox textBox in TextBoxes)
{
Controls.Add(textBox);
}
}

标记方法如前一个答案所述工作,这个片段应该工作,只需根据您的需要更改pnlTextBox和pnlButtons:

private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = true;
openFileDialog.ShowDialog();
string[] files = openFileDialog.FileNames.ToArray();
int index = 0;

foreach (var file in files)
{
var button = new Button()  { Text = "Edit", Top = index +50, Left = 150 };
var textBox = new TextBox() { Text = file, Top = index +50, Left = 5 };
button.Tag = textBox;
button.Click += Button_Click;
pnlTextBox.Controls.Add(textBox);//Add the textbox to the container i used a panel here
pnlButtons.Controls.Add(button);//Add the button to the container i used a panel here

index = index + 25;
}

}
private void Button_Click(object sender, EventArgs e)
{
var button=((Button)sender);
var textBox = ((TextBox)(button.Tag));
textBox.Text = button.Text;//example to access the proper textbox
}

有很多方法可以处理这个问题。你可以把文本框粘贴到按钮的Tag属性中,这样创建它们:

foreach (var file in files)
{
var txt = new TextBox() { Text = file, Top = index +50, Left = 5 };
var btn = new Button() { Text = "Edit", Top = index +50, Left = 150, Tag = 
txt };
EditButtons.Add(btn);
TextBoxes.Add(txt);
index = index + 25;
}

然后,当你处理点击事件时,使用以下行获取文本框:

var txt = (sender as Button).Tag

显然还有其他方法,比如把按钮和文本框放在字典里,但我认为这是最简单的方法。

最新更新