繁体   English   中英

如何访问TabControl的TabPage中的控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM