我的表单中有两个按钮,TabControl 中有两个文本框。
我不确定如何使用按钮将文本框的文本保存到剪贴板。
为此,我们尝试为控件分配相同的
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);
}
}
使用此循环,您只需搜索来自类型
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()
条目。
foreach (TabPage TP in Tcontrol.Controls)
{
foreach (Control C in TP.Controls)
{
if (C is TextBox Tb)
{
Clipboard.SetDataObject(Tb.Text);
}
}
}