Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本形式中的文本更改事件:有更好的方法吗?_C#_.net_Winforms - Fatal编程技术网

C# 文本形式中的文本更改事件:有更好的方法吗?

C# 文本形式中的文本更改事件:有更好的方法吗?,c#,.net,winforms,C#,.net,Winforms,我的目标是在用户输入时将选项卡的标题更改为文本字段中的标题。问题是,文本形式是在一个过程中动态创建的,因此无法从其他过程访问。我制作了一个事件处理程序,但出乎意料的是,EventArgs不包含文本字段的任何属性。代码如下: private void toolStripButton1_Click(object sender, EventArgs e) { NewChar(); } private void NewChar() { TabPage ntab = new TabPage

我的目标是在用户输入时将选项卡的标题更改为文本字段中的标题。问题是,文本形式是在一个过程中动态创建的,因此无法从其他过程访问。我制作了一个事件处理程序,但出乎意料的是,EventArgs不包含文本字段的任何属性。代码如下:

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;