如何访问TabControl的TabPage中的控件

问题描述 投票:0回答:3

我的表单中有两个按钮,TabControl 中有两个文本框。

我不确定如何使用按钮将文本框的文本保存到剪贴板。
为此,我们尝试为控件分配相同的

AccessibleName

我编写了代码,但我不知道如何访问 TabControl 的 TabPage。
最后,有人知道更好的方法吗?

See Screen Shot of my Form

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);
                }
            }
        }
    }
c# winforms
3个回答
1
投票

使用模式匹配:

if (c is TextBox textBox)
{
    Clipboard.SetDataObject(textBox.Text);
}

0
投票

您可以修改 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);
    }
}

使用此循环,您只需搜索来自类型

Controls
Textbox
。 使用
OfType
方法来避免
InvalidCastExceptions
。 如果您的表单中有其他继承自
TextBox
的控件,我建议将行
x.GetType()==typeof(TextBox)
添加到
Where()
方法中。 使用
Where()
方法,我们只选择与我们的
AccessibleName
相同
sender
的项目。

但是,如果您有更多

textboxes
具有相同的
AccessibleName
,则此循环将遍历所有项目并仅选择最后一个文本。

在这种情况下我建议:

Clipboard.SetDataObject(yourTabPage.Controls.OfType<TextBox>()
                        .Where(x=>x.AccessibleName ==((Control)sender).AccessibleName))
                        .ToList()
                        .FirstOrDefault().Text);

这里我们将从控件中找到的第一个文本框中获取 1 个文本。您还可以选择

Last()
条目。


0
投票
foreach (TabPage TP in Tcontrol.Controls)
{
    foreach (Control C in TP.Controls)
    {
        if (C is TextBox Tb)
        {
            Clipboard.SetDataObject(Tb.Text);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.