Как получить доступ к элементам управления в TabPage из TabControl - PullRequest
0 голосов
/ 17 января 2019

У меня есть две кнопки в моей форме и два текстовых поля внутри TabControl.

Я не уверен, как сохранить в буфер обмена текст TextBoxes с помощью кнопок.
Для этого мы попытались присвоить одинаковые AccessibleName элементам управления.

Я работал над кодом, но я не знаю, как получить доступ к TabPages из TabControl.
Наконец, кто-нибудь знает лучший способ сделать это?

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);
                }
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете изменить цикл 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 голосов
/ 17 января 2019

Использовать сопоставление с образцом:

if (c is TextBox textBox)
{
    Clipboard.SetDataObject(textBox.Text);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...