[英]How to access the controls in the TabPage of a TabControl
我的窗体中有两个Button,而TabControl中有两个TextBox。
我不确定如何使用按钮将文本框的文本保存到剪贴板。
为此,我们尝试为控件分配相同的AccessibleName
。
我处理了代码,但不知道如何访问TabControl的TabPage。
最后,有人知道更好的方法吗?
public partial class Form1 : Form
{
private void SaveNumBot(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
if (c.AccessibleName == ((Control)sender).AccessibleName)
{
if (c is TextBox)
{
Clipboard.SetDataObject(c.Text);
}
}
}
}
使用模式匹配:
if (c is TextBox textBox)
{
Clipboard.SetDataObject(textBox.Text);
}
您可以修改foreach循环:
foreach(TabPage tabPage in yourTabControl.Controls)
{
foreach (TextBox textBox in tabPage.Controls.OfType<TextBox>().Where(x=>x.AccessibleName == ((Control)sender).AccessibleName))
{
Clipboard.SetDataObject(textBox.Text);
}
}
在此循环中,您仅搜索类型为Textbox
Controls
。 使用OfType
方法可以避免InvalidCastExceptions
。 如果您还有其他从Form的TextBox
继承的TextBox
,则建议将x.GetType()==typeof(TextBox)
行添加到Where()
方法。 使用Where()
方法,我们仅选择与sender
一样具有相同AccessibleName
的项目。
但是,如果您有更多具有相同AccessibleName
textboxes
,则此循环将贯穿所有项目,并且仅选择最后一个文本。
在这种情况下,我建议:
Clipboard.SetDataObject(yourTabPage.Controls.OfType<TextBox>()
.Where(x=>x.AccessibleName ==((Control)sender).AccessibleName))
.ToList()
.FirstOrDefault().Text);
在这里,我们将从控件中找到的第一个texbox中获取1个文本。 您还可以选择Last()
条目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.