C# 文本形式中的文本更改事件:有更好的方法吗?
我的目标是在用户输入时将选项卡的标题更改为文本字段中的标题。问题是,文本形式是在一个过程中动态创建的,因此无法从其他过程访问。我制作了一个事件处理程序,但出乎意料的是,EventArgs不包含文本字段的任何属性。代码如下:C# 文本形式中的文本更改事件:有更好的方法吗?,c#,.net,winforms,C#,.net,Winforms,我的目标是在用户输入时将选项卡的标题更改为文本字段中的标题。问题是,文本形式是在一个过程中动态创建的,因此无法从其他过程访问。我制作了一个事件处理程序,但出乎意料的是,EventArgs不包含文本字段的任何属性。代码如下: private void toolStripButton1_Click(object sender, EventArgs e) { NewChar(); } private void NewChar() { TabPage ntab = new TabPage
private void toolStripButton1_Click(object sender, EventArgs e)
{
NewChar();
}
private void NewChar()
{
TabPage ntab = new TabPage("New char");
TextBox cname = new TextBox();
tabControl1.Controls.Add(ntab);
ntab.Controls.Add(cname);
cname.Location = new Point(10, 10);
cname.TextChanged += new EventHandler(cname_TextChanged);
}
最后,我注意到,该事件的发送者值保存文本字段的当前文本,所以我只需从发送者的字符串重新呈现中剪切该值:
void cname_TextChanged(object sender, EventArgs e)
{
string tmp = sender.ToString();
int pos = tmp.IndexOf(":");
string txt = tmp.Substring(pos+1);
tabControl1.SelectedTab.Text = txt;
}
虽然这样做很好,但我觉得应该有一种更温和的方式来做。如果你碰巧认识一个人,你能给我点化一下吗
谢谢您的时间。您不必解析ToString()的结果,只需将其转换为文本框,然后直接访问文本即可
void cname_TextChanged(object sender, EventArgs e)
{
TextBox txt= sender as TextBox;
if (txt !=null)
tabControl1.SelectedTab.Text = txt.Text;
}
AFAIK sender对象应该是TextBox对象,因此您可以强制转换它并获得值:TextBox tb=(TextBox)sender;txt=tb.Text;