Опубликован: 11.09.2006 | Доступ: свободный | Студентов: 7648 / 473 | Оценка: 4.26 / 3.45 | Длительность: 30:46:00
ISBN: 978-5-9556-0080-2
Лекция 6:

Работа с печатью и изображениями

В каждом обработчике мы добавили метод Invalidate для перерисовки содержимого pictureBox1 после выбора пункта меню. Удобно, когда выбранный пункт меню помечается галочкой (см. рис. 6.10). Переходим в режим дизайна, выделяем пункт меню Вид (View) и в окне Properties дважды щелкаем в поле события Popup:

private void mnuView_Popup(object sender, System.EventArgs e)
{
  if (sender is MenuItem) 
  {
    bool ImLoad  = (pictureBox1.Image != null);
    foreach (MenuItem menuitem in ((MenuItem)sender).MenuItems)
        {
          menuitem.Enabled = ImLoad;
          menuitem.Checked = (this.selectedMode == menuitem.Index);
        }
  }
    
}

В обработчиках пунктов контекстного меню дублируем код для соответствующих пунктов главного меню:

private void cmnuResize_Click(object sender, System.EventArgs e)
  {
    Вставляем скопированный код для  mnuResize_Click
  }

private void cmnuActual_Click(object sender, System.EventArgs e)
  {
    Вставляем скопированный код для  mnuActual _Click
  }

private void cmnuCenterImage_Click(object sender, System.EventArgs e)
  {
    Вставляем скопированный код для  mnuCenterImage _Click
  }

private void cmnuAutoSize_Click(object sender, System.EventArgs e)
  {
    Вставляем скопированный код для  mnuAutoSize _Click
  }

Запускаем приложение. Оно должно походить на приложение, изображенное на рис. 6.10. Добавим теперь к нашему приложению строку состояния, на которую будет выводиться размер загруженного изображения и его адрес. Из окна ToolBox перетаскиваем на форму элемент StatusBar, щелкаем в поле его свойства Panels и в открывшемся окне StatusBarPanel Collection Edito r добавляем панели sbFile и sbSize (рис. 6.11 и рис. 6.12).

Панель sbFile. Свойству Width панели установлено значение 500 пикселей

Рис. 6.11. Панель sbFile. Свойству Width панели установлено значение 500 пикселей
Панель sbSize

Рис. 6.12. Панель sbSize

Свойству ShowPanels элемента statusBar1 устанавливаем значение True. В обработчике пункта меню "Открыть" — код для вывода на панель sbFile адреса файла, а на панель sbSize — его размер:

private void mnuOpen_Click(object sender, System.EventArgs e)
  {
    …
    
    //Строка для вывода   во время загрузки изображения
    sbFile.Text  = "Загрузка " + diag.FileName;
    //Строка для вывода после загрузки изображения    
sbFile.Text  = "Изображение " + diag.FileName;
//Вывод ширины (Width) и высоты (Height) изображения
  sbSize.Text= String.Format("{0:#} x {1:#}", pictureBox1.Image.Width, pictureBox1.Image.Height);
  }
Листинг 6.8.

Запускаем и тестируем приложение (рис. 6.13).

Строка состояния приложения Picture Viewer

Рис. 6.13. Строка состояния приложения Picture Viewer
Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/