我创建了手动添加textBox和Button的功能。
这是我的实际脚本:
private void OpenFileDialogButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string souborFilename = openFileDialog1.FileName;
filePathText.Text = souborFilename;
}
}
private void nextDialog_Click(object sender, EventArgs e)
{
if (calculate <= 7)
{
TextBox text = new TextBox();
text.Location = new Point(filePathText.Location.X, filePathText.Location.Y + y);
text.Size = new Size(194, 20);
text.ReadOnly = true;
text.Name = "filePathText" + "{calculate}";
//MessageBox.Show(text.Name);
this.Controls.Add(text);
Button button = new Button();
button.Location = new Point(OpenFileDialogButton.Location.X, OpenFileDialogButton.Location.Y + y);
button.Size = new Size(33, 24);
button.Text = "...";
button.Click += new EventHandler(OpenFileDialogButton_Click);
this.Controls.Add(button);
this.nextDialog.Location = new Point(22, 49 + y);
}
else
{
this.nextDialog.Controls.Remove(nextDialog);
this.nextDialog.Dispose();
MessageBox.Show("Maximální možnost počtů přidaných souborů byla dosažena!");
}
y = y + 28;
calculate++;
}
当用户点击nextDialog按钮时,它创建了正确的下一个按钮和textboxt,但所有按钮都具有相同的功能。每个按钮都有自己的textBox。
问题是在使用openFileDialog之后,每个按钮仍然会更改相同的textBox。我需要每个按钮只更改自己的textBox。
所以我需要帮助功能“OpenFileDialogButton_Click”。
正是这部分:
filePathText.Text =这是我默认的TextBox名称,比我开始使用手动添加文本框和按钮的功能。有必要让它变得动态。
filePathText.Text = souborFilename;
这是我的问题的图片:
http://i.imgur.com/z698zAz.jpg http://i.imgur.com/PGJgvjl.jpg
答案 0 :(得分:1)
最简单的方法是使用TextBox和Button创建自定义控件,并在nextDialog上添加该控件。
答案 1 :(得分:1)
您的按钮有一个Tag
属性可以接受一个Object,尝试将相关的TextBox名称放入其中,然后使用Controls.Find
方法找到具有该名称的TextBox。这样的事情。
您修改的NextDialog方法:
private void nextDialog_Click(object sender, EventArgs e)
{
if (calculate <= 7)
{
TextBox text = new TextBox();
text.Location = new Point(filePathText.Location.X, filePathText.Location.Y + y);
text.Size = new Size(194, 20);
text.ReadOnly = true;
text.Name = "filePathText" + "{calculate}";
//MessageBox.Show(text.Name);
this.Controls.Add(text);
Button button = new Button();
button.Location = new Point(OpenFileDialogButton.Location.X, OpenFileDialogButton.Location.Y + y);
button.Size = new Size(33, 24);
button.Text = "...";
button.Tag = text.Name; //Name of associated TextBox added to Tag Property
button.Click += new EventHandler(OpenFileDialogButton_Click);
this.Controls.Add(button);
this.nextDialog.Location = new Point(22, 49 + y);
}
else
{
this.nextDialog.Controls.Remove(nextDialog);
this.nextDialog.Dispose();
MessageBox.Show("Maximální možnost počtů přidaných souborů byla dosažena!");
}
y = y + 28;
calculate++;
}
您的事件处理程序:
private void OpenFileDialogButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Button btn = sender as Button; //Get the Button that was clicked
string souborFilename = openFileDialog1.FileName;
this.Controls.Find((string)btn.Tag), true )[0].Text = souborFilename; //Find textbox that matches stored name
//since method returns an array you will
//have to access it threw an index.
}
}
答案 2 :(得分:0)
我建议你给你正在创建的新按钮命名,并根据“OpenFileDialogButton_Click”中的发件人名称分配文本框。
button.Name = "btn";
private void OpenFileDialogButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string souborFilename = openFileDialog1.FileName;
string s = ((Button)sender).Name;
if (s == "btn")
{
Newtextbox.Text = "";
}
else
filePathText.Text = souborFilename;
}
}
答案 3 :(得分:0)
您可以将功能绑定为 -
button.Click += OpenFileDialogButton_Click(text);
您的功能可以像 -
private EventHandler OpenFileDialogButton_Click(TextBox txt){ //Your code }
每次都可以方便您传递新创建的文本框对象。
答案 4 :(得分:0)
尝试更改动态 OpenFileDialogButton 按钮的事件处理程序,如下所示:
private void nextDialog_Click(object sender, EventArgs e)
{
...
TextBox text = new TextBox();
text.Location = new Point(filePathText.Location.X, filePathText.Location.Y + y);
text.Size = new Size(194, 20);
text.ReadOnly = true;
text.Name = "filePathText" + "{calculate}";
//MessageBox.Show(text.Name);
this.Controls.Add(text);
Button button = new Button();
button.Location = new Point(OpenFileDialogButton.Location.X, OpenFileDialogButton.Location.Y + y);
button.Size = new Size(33, 24);
button.Text = "...";
// -- start changes
button.Click += (o, args) => {
using (var opf = new OpenFileDialog()) {
if (opf.ShowDialog() == DialogResult.OK) {
var souborFilename = opf.FileName;
text.Text = souborFilename;
}
}
};
// -- end changes
this.Controls.Add(button);
this.nextDialog.Location = new Point(22, 49 + y);
...
}
答案 5 :(得分:0)
private void OpenFileDialogButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string souborFilename = openFileDialog1.FileName;
foreach (var control in this.Controls)
{
if (control is TextBox)
{
TextBox tb = control as TextBox;
Button b = sender as Button;
if(b != null && tb.Name.Equals("filePathText" + b.Name.Substring(b.Name.Count()-1,1)))
{
tb.Text = souborFilename;
}
}
}
filePathText.Text = souborFilename;
}
}
private void nextDialog_Click(object sender, EventArgs e)
{
if (calculate <= 7)
{
TextBox text = new TextBox();
text.Location = new Point(filePathText.Location.X, filePathText.Location.Y + y);
text.Size = new Size(194, 20);
text.ReadOnly = true;
text.Name = "filePathText" + calculate.ToString();
//MessageBox.Show(text.Name);
this.Controls.Add(text);
Button button = new Button();
button.Location = new Point(OpenFileDialogButton.Location.X, OpenFileDialogButton.Location.Y + y);
button.Size = new Size(33, 24);
button.Text = "...";
button.Click += new EventHandler(OpenFileDialogButton_Click);
button.Name = "filePathButton" + calculate.ToString();
this.Controls.Add(button);
this.nextDialog.Location = new Point(22, 49 + y);
}
else
{
this.nextDialog.Controls.Remove(nextDialog);
this.nextDialog.Dispose();
MessageBox.Show("Maximální možnost počtů přidaných souborů byla dosažena!");
}
y = y + 28;
calculate++;
}