在学校项目中,我必须在MouseClick事件中创建“动态”(如果这是正确的术语)文本框。通过单击最近创建的文本框,将打开另一个表单(通过另一个MouseClick事件)。
在新的表单中,我想将文本从最近创建的文本框更改为我在新文本中插入的文本。
我的问题是,当我创建多个文本框时,右侧文本框没有更新,它总是编辑我创建的最后一个文本框。
private int tbcount = 1;
//Dynamische textbox
private TextBox tbNewUseCase;
private List<TextBox> textboxlist = new List<TextBox>();
public frm_use_case()
{
InitializeComponent();
}
//Textbox clicks
private void tbNewUseCase_MouseClick(object sender, MouseEventArgs e)
{
ucform usecase = new ucform(this, tbNewUseCase);
usecase.Show();
}
//Update textbox text
public void UpdateTbTekst(TextBox tb, string tekst)
{
tb.Text = tekst;
}
//Mouseclick on the form
private void frm_use_case_MouseClick(object sender, MouseEventArgs e)
{
if (rbTekst.Checked)
{
//Only in a certain area I want a textbox to be created
if (e.X > 288 && e.X < 451 - 100 && e.Y > 66 && e.Y < 421)
{
tbNewUseCase = new TextBox();
tbNewUseCase.Name = "tbUseCase" + tbcount;
tbNewUseCase.Location = new Point(e.X, e.Y);
tbNewUseCase.ReadOnly = true;
tbNewUseCase.MouseClick += tbNewUseCase_MouseClick;
this.Controls.Add(tbNewUseCase);
textboxlist.Add(tbNewUseCase);
tbcount++;
}
}
}
这是在单击其中一个文本框时创建的另一种形式的代码。
private frm_use_case mnform;
private TextBox currentusecase;
public TextBox Currentusecase
{
get
{
return currentusecase;
}
set
{
currentusecase = value;
}
}
public ucform(frm_use_case mainform, TextBox usecase)
{
InitializeComponent();
mnform = mainform;
Currentusecase = usecase;
}
//Calls the method that changes the text in the main form
//tbNaam is a textbox.
private void tbNaam_TextChanged(object sender, EventArgs e)
{
mnform.UpdateTbTekst(huidigeusecase, tbNaam.Text);
}
编辑:史蒂夫成功地回答了我的问题!
答案 0 :(得分:1)
您正在以第一种形式MouseClick事件创建TextBoxes列表
在该代码中,您使用TextBox的新实例重复初始化名为tbNewUseCase
的TextBox引用。在循环结束时,引用变量tbNewUseCase
引用最后创建的文本框。
现在,当您将此引用传递给第二个表单时,更新会在此实例上发生,动态创建并添加到列表中的其他实例根本不受影响。所以你只能改变一个文本框。
现在,如果您希望更改发生在点击的文本框中,那么您应该更改将文本框更新为ucform
//Textbox clicks
private void tbNewUseCase_MouseClick(object sender, MouseEventArgs e)
{
// Here sender is a reference to the currently clicked textbox
// and you could pass that reference to the ucform constructor
ucform usecase = new ucform(this, sender as TextBox);
usecase.Show();
}