Как обрабатывать события для динамически генерируемых вкладок в c #? - PullRequest
0 голосов
/ 27 мая 2019

Я добавляю событие для вкладок, которые создаются динамически.Однако при взаимодействии с пользовательским интерфейсом событие не вызывается.Помогите!:)

Я уже пробовал ниже, но не работает:

Обработка событий для динамически генерируемых элементов управления

C # TabControl TabPage прохождение событий

    private void FileListView_DoubleClick(object sender, EventArgs e)
    {
        if (FileListView.SelectedIndices != null && FileListView.SelectedIndices.Count > 0)
        {
            FileListViewTask.Expand(settingsForm, FileListView, FileListView.SelectedIndices[0]);
            string filepathSelected=FileListViewTask.getFilePath(FileListView.SelectedIndices[0]);
            if (filepathSelected != "")
            {
                bool tabAlreadyExists = false;
                foreach (TabPage tabpage in SourceTabControl.TabPages)
                {
                    if (tabpage.GetNextControl(new Label(), true).Text == filepathSelected)
                    {
                        SourceTabControl.SelectTab(tabpage);
                        tabAlreadyExists = true;
                        break;
                    }

                }
                if (!tabAlreadyExists)
                {
                    TabPage tabpage = (new CodePageGenerator(filepathSelected)).createPage();
                    tabpage.Parent = SourceTabControl;
                    tabpage.MouseDoubleClick += new MouseEventHandler(tabpage_MouseDoubleClick);
                    tabpage.Click += new EventHandler(this.tabpage_Click);
                    SourceTabControl.SelectTab(tabpage); 
                }
            }
        }
    } 

    void tabpage_Click(object sender, EventArgs e)
    {
        TabPage tabpage = (TabPage)sender;
        SourceTabControl.TabPages.Remove(tabpage);
        MessageBox.Show("yow");
    }

    void tabpage_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        TabPage tabpage = (TabPage)sender;
        SourceTabControl.TabPages.Remove(tabpage);
        MessageBox.Show("yow");
    }

ОБНОВЛЕНИЕ

приведенный выше код работает, когда происходит щелчок внутри содержимого TabPage.Но не работает при нажатии вкладок

1 Ответ

0 голосов
/ 07 июня 2019

Я уже понял это!

Ключ в том, чтобы добавить событие в TabControl, а не в TabPage!Событие при нажатии кнопок вкладки передается в TabControl.

Инициализирует обработчик событий

    SourceTabControl.MouseDoubleClick += new MouseEventHandler(SourceTabControl_MouseDoubleClick);

, затем

    private void SourceTabControl_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        SourceTabControl.TabPages.Remove(SourceTabControl.SelectedTab);
    }
...