Вы можете изменить цикл 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()
.