/// <summary> /// <para>Обработчик правого клика по панелям, задается при их инициализации</para> /// <para>Переносит данные из нажатой панели в <see cref="RSSItemDescriptionPanel" />, перекрашивает панели</para> /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RightClickHandler(object sender, MouseEventArgs e) { var clickedPanel = sender as RSSItemPanel; if (!clickedPanel.Equals(_lastClickedPanel) && e.Button == MouseButtons.Right) { rssItemDescriptionPanel.SetContent(clickedPanel.Item); clickedPanel.Highlighted = true; if (_lastClickedPanel != null) { _lastClickedPanel.Highlighted = false; } _lastClickedPanel = clickedPanel; } }
/// <summary> /// Загрузка и обновление списка RSS-элементов /// </summary> private void LoadData() { panelList.Controls.Clear(); if (config.Feeds?.Count > 0) { // Анимация загрузки pictureBoxLoading.Visible = true; var rightClickHandler = new MouseEventHandler(RightClickHandler); // Данные грузятся в отдельном потоке var itemsDTOTask = Task.Run(() => loadRSS(config.Feeds)); var itemsDTO = itemsDTOTask.Result; //К огда данные загрузились, выключаем анимацию загрузки pictureBoxLoading.Visible = false; if (itemsDTO?.Count > 0) { buttonReload.Visible = false; // Добавляем панели на каждый элемент данных var y = 0; foreach (var item in itemsDTO.OrderByDescending(i => i.PubDate)) { var itemPanel = new RSSItemPanel(item, rightClickHandler); itemPanel.Location = new Point(0, y * (itemPanel.Height + 2)); panelList.Controls.Add(itemPanel); y++; } } else { buttonReload.Visible = true; } } else { buttonReload.Visible = true; pictureBoxLoading.Visible = false; MessageBox.Show("Добавьте ленты в настройках", "Отсутствуют ленты для загрузки"); } }