Форма списка сообщений MessageList.cs
Значения свойства Name элементов управления этой формы приведены на рис. 3.31.
увеличить изображение
Рис. 3.31. Форма MessageList
Полный листинг формы:
Листинг 3.23.
(html, txt)
} #endregion
private void MessageList_Load(object sender, System.EventArgs e) { try { // Вход в почтовый сервер. mail.LogIn(identity.Name, identity.Password); // Отображение количества сообщений. lblMessagesCount.Text += mail.NumberOfMessages.ToString(); this.LoadCurrentPageMessages(1); this.DrawPages(1); } catch(Exception ex) { MessageBox.Show(" При выполнении подключения возникла ошибка: " + ex.Message); } } /// <summary> /// Прорисовывает листинг страниц. /// </summary> /// <param name="currentPageIndex">Номер текущей страницы.</param> void DrawPages(uint currentPageIndex) { // Очищаем контейнер. pnlPages.Controls.Clear(); uint messagesPerPage = 20; uint pagesCount = (uint)(mail.NumberOfMessages / messagesPerPage); // Отображаем номера существующих страниц. for(uint i = 1; i <= pagesCount; i++) { LinkLabel page = new LinkLabel(); page.Text = i.ToString(); page.Tag = i; page.Click += new EventHandler(page_Click); if(i == currentPageIndex) page.ForeColor = Color.Black; page.Size = new Size(20, 20); page.Location = new Point(30 * (int)i, 5); pnlPages.Controls.Add(page); } } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void page_Click(object sender, EventArgs e) { uint newPageIndex = Convert.ToUInt32(((LinkLabel)sender).Tag); this.LoadCurrentPageMessages(newPageIndex); this.DrawPages(newPageIndex); }
/// <summary> /// Отображает сообщения текущей страницы. /// </summary> /// <param name="currentPageIndex">Номер текущей страницы.</param> void LoadCurrentPageMessages(uint currentPageIndex) { // Количество сообщений на странице. uint messagesPerPage = 20; // Индекс первого сообщения на странице. uint startIndex = mail.NumberOfMessages — messagesPerPage * currentPageIndex; // Индекс последнего сообщения на странице. uint finishIndex = startIndex + 20; // Загрузка заголовков сообщений. for(uint currentMessageIndex = startIndex + 1; currentMessageIndex <= finishIndex; currentMessageIndex++) { Mail.Message msg = null; try { // Попытка загрузки заголовков сообщения. msg = mail.GetMessageHeader(currentMessageIndex, 0); } catch(Exception ex) { // Отображение возникшей ошибки. MessageBox.Show("При загрузке заголовков сообщения возникла ошибка. Номер сообщения: " + currentMessageIndex + "; Текст ошибки: " + ex.Message); } // Если возникла ошибка, то пропускаем текущее сообщение. if(msg == null) continue; // Отображение информации о сообщении. ListViewItem item = new ListViewItem( new string[]{currentMessageIndex.ToString(), msg.FromEmail, msg.Subject, msg.Date}, 0); item.Tag = currentMessageIndex; lstViewMessages.Items.Add(item); } }
private void lstViewMessages_Click(object sender, System.EventArgs e) { try { // Получение номера выделенного сообщения. uint messageIndex = Convert.ToUInt32(lstViewMessages.SelectedItems[0].Tag); // Загрузка сообщения с сервера. Mail.Message msg = mail.GetMessage(messageIndex); // Отображение сообщения. ViewMessage messageViewer = new ViewMessage(msg); messageViewer.ShowDialog(); } catch(Exception ex) { MessageBox.Show("Во время загрузки сообщения произошла следующая ошибка: " + ex.Message); } }
} }
Листинг 3.23.