ОШИБКА: невозможно преобразовать тип System.type в system.drawing.Image - PullRequest
0 голосов
/ 17 августа 2011

У меня есть две формы: одна equipmentfinder, а другая productdescription.У меня есть сетевое представление со столбцами productname и productimage в форме equipmentfinder.

Когда я нажимаю на один из столбцов (т. Е.) productimage столбец, он переходит на другую страницу, которая работала нормально.

Я делаю приложение WinForms.

Но я хочу отобразить выбранное изображение в столбце productimage из таблицы данных в другом окне рисунка в форме equipmentfinder.

Итакдля этого я сделал так:

 private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e)
 {
    if (e.ColumnIndex == productgridview.Columns["productimage"].Index)
    {
        ProductDescriptionForm pf = new ProductDescriptionForm();
        pf.ShowDialog(this);
    }
 }

и в форме productdescription я сделал так:

 private void ProductDescriptionForm_Load(object sender, EventArgs e)
 {
    EquipmentFinder eqipu = new EquipmentFinder();
    this.imagepicture.Image = (Image)eqipu.productgridview.SelectedCells.GetType();
 }

но я получил ошибку в этой строке:

this.imagepicture.Image =(Image)eqipu.productgridview.SelectedCells.GetType();

Ошибка: невозможно преобразовать тип system.type в system.drawing.image

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Пара вещей.Во-первых, использование GetType () возвращает тип объекта, а не сам объект, поэтому вам необходимо удалить GetType ().Во-вторых, похоже, что SelectedCells является коллекцией, поэтому вам необходимо указать индекс ячейки.

//replace zero index with index of the cell that contains the image
this.imagepicture.Image = (Image)eqipu.productgridview.SelectedCells[0];
0 голосов
/ 17 августа 2011

То, что вы пытаетесь получить здесь, это тип объекта, хранящегося в ячейке datagridview, который действительно является объектом "System.Type", а не "System.Drawing.Image", приведениемэто бесполезно здесь.Вам нужно получить содержимое ячейки, а не тип содержимого.

В этом коде есть другие ошибки!

  • SelectedCells - это коллекция ячеек.Таким образом, вы получаете не тип содержимого ячейки, а тип коллекции (т. Е. DataGridViewSelectedCellCollection).Если вы уверены, что выбрана хотя бы одна ячейка, вы должны использовать SelectedCells[0].

  • Вы хотите получить содержимое ячейки, а не ее тип.Используйте Value вместо GetType().

  • Я не понимаю, почему вы создаете новый EquipmentFinder.Это создаст пустую и никогда не отображаемую форму ... Что я предлагаю: создать свойство для хранения изображения в ProductDescriptionForm:

    public Image Picture
    {
        get { return imagepicture.Image; }
        set { imagepicture.Image = value; }
    }
    

Затем установите это свойство перед отображениемФорма описания продукта:

    private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e)
    {
      if (e.ColumnIndex == productgridview.Columns["productimage"].Index)
      {
          ProductDescriptionForm pf = new ProductDescriptionForm();
          pf.Picture = (Image)productgridview.SelectedCells[0].Value;
          pf.ShowDialog(this);
      }
   }

И удалите код, который вы написали в ProductDescriptionForm_Load.

PS: хотя я надеюсь, что этот код работает, он все еще пропускает границы и проверку типов.Я бы порекомендовал написать что-то вроде этого:

    private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e)
    {
      // Don't handle clicks on the column header.
      if (e.RowIndex == -1) return; 

      // Bad index
      if (e.ColumnIndex != productgridview.Columns["productimage"].Index) return;

      // No selection
      if (productgridview.SelectedCells.Count == 0) return;

      // Make sure we have an image in this cell.
      object selectedValue = productgridview.SelectedCells[0].Value;
      if (selectedValue is Image) 
      {
          // Forms are IDisposable, so use them embedded in a using statement.
          using (ProductDescriptionForm pf = new ProductDescriptionForm())
          {
              pf.Picture = (Image)selectedValue;
              pf.ShowDialog(this);
          }
      }
   }

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...