Метод Epicor10-Image.Save

Я пытаюсь создать индивидуальное окно в Epicor 10. Я добавил изображение и просто пытаюсь открыть изображение (bmp) из файла, а затем с помощью другой кнопки сохранить его в другом месте. Проблема в том, что в диалоговом окне «Инструменты настройки» в Epicor 10, где я пишу код при компиляции, я продолжаю получать эту ошибку:

Error: CS1061 - line 258 (953) - 'object' does not contain a definition for 'Save' and no extension method 'Save' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
 ** Compile Failed. **

Теперь, когда я скопировал код и воссоздал приложение формы Windows с помощью Visual Studio 2012, все работает нормально, никаких ошибок при компиляции.

Код довольно прост:

private void epiButtonC6_Click(object sender, System.EventArgs args)
{
    var fd = new SaveFileDialog();
        fd.Filter = "Bmp(*.Bmp)|*.bmp;| Jpg(*Jpg)|*.jpg;| Png(*Png)|*.png";
        fd.AddExtension = true;

        if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            switch (Path.GetExtension(fd.FileName).ToUpper())
            {
                case ".BMP":                        
                    epiPictureBoxC1.Image.Save(fd.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                    break;
                case ".JPG":
                    epiPictureBoxC1.Image.Save(fd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                    break;
                case ".PNG":
                    epiPictureBoxC1.Image.Save(fd.FileName, System.Drawing.Imaging.ImageFormat.Png);
                    break;
                default:
                    break;
            }
        }       
}

person John    schedule 02.02.2016    source источник
comment
Какой тип epiPictureBoxC1.Image в проекте, где он не компилируется? Меня как-то смущает (если это та строка, где ошибка), что компилятор думает, что это типа object. Нужна ли для этого дополнительная ссылка на сборку System.Drawing?   -  person Maximilian Gerhardt    schedule 03.02.2016
comment
epiPictureBoxC1 — это имя PictureBox. Тип: Ice.Lib.Framework.EpiPictureBox   -  person John    schedule 03.02.2016
comment
Я имел в виду явно свойство .Image, на котором вызывается .Save(), на что компилятор жалуется, извините.   -  person Maximilian Gerhardt    schedule 03.02.2016
comment
Это тот же тип, что и в VS2012. .сеть)   -  person John    schedule 03.02.2016


Ответы (1)


EpiPictureBox не является производным от System.Windows.Forms.PictureBox. Он является производным от Infragistics.Win.UltraWinEditors.UltraPictureBox.

Свойство Image в System.Windows.Forms.PictureBox имеет тип System.Drawing.Image, тогда как свойство Image в Infragistics.Win.UltraWinEditors.UltraPictureBox< /strong> — это System.Object. Вот почему вещи ведут себя не так, как вы ожидаете.

Мне удалось заставить макет работать, используя следующее, которое будет работать до тех пор, пока вы уверены, что все, что назначено свойству epiPictureBoxC1.Image, действительно сможет быть приведено как System.Drawing.Image

switch (Path.GetExtension(fd.FileName).ToUpper())
        {
            case ".BMP":                        
                ((System.Drawing.Image)epiPictureBoxC1.Image).Save(fd.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                break;
            case ".JPG":
                ((System.Drawing.Image)epiPictureBoxC1.Image).Save(fd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                break;
            case ".PNG":
                ((System.Drawing.Image)epiPictureBoxC1.Image).Save(fd.FileName, System.Drawing.Imaging.ImageFormat.Png);
                break;
            default:
                break;
        }
person Van Amburg    schedule 04.02.2016