none
Массив Image RRS feed

Ответы

  • Предположим, что у него массив имагов определён в классе формы (например Form1 : Form ).
    Если думать из этого предположения, то идём дальше.

    Тогда другой формой будет или другой класс формы, или экземпляр этого же класса.
    Тут развилка:
    Или элемент массива сам лежит в другой форме,
    или же в той форме должно быть обращение к элементу массива, который лежит в "этой" форме.

    В обоих случаях, для обращения к элементу массива, нужно сделать его доступным.
    Может быть у него в этом и получилась проблема.

    Тут новая развилка.
    Лежит ли класс формы (или в чём там массив) в той же сборки что и вторая форма (или откуда обращается),
    или же в другой сборке.
    Если в той же, то можно поставить internal модификатор на массив, и, если надо, то на экземпляр формы.
    Если в другой сборке, то public.

    В принципе должно помочь, если все предположения окажутся верными.

    Если надо отовсюду обращаться, и чтобы не являлось членом экземпляра класса,
    то ещё static можно приплести. Но ими лучше не сильно увлекаться, а то получится что-то вроде глобальных переменных, записью в реестр или заголовочных файлов и тд.


    • Изменено INFEL8 16 июля 2012 г. 14:06
    • Помечено в качестве ответа Abolmasov Dmitry 23 июля 2012 г. 11:58
    16 июля 2012 г. 13:58
  • Если вы используете WinForms, то вашу задачу можно решить следующим способом:

    1. Я для демонстрационных целей создал папку G:\Images и записал в нее картинки 0.jpeg, 1.jpeg, 2.jpeg

    2. Добавил в решение еще одну форму. На первую кинул кнопку, на вторую NumericUpDown, Button и PictureBox.

    3. Код для второй формы у меня имеет вид:

    public partial class Form2 : Form
    {
        public Form2(Image[] p_images)
        {
            InitializeComponent();
            _images = p_images;
        }
    
        Image[] _images = null;
    
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.Image = _images[(int)numericUpDown1.Value];
        }
    }

    Как видите, для создания второй формы, в конструктор необходимо передать ссылку на массив изображений, при выборе в NumericUpDown числа (номер картинки в массиве) и нажатии на кнопку, картинка грузится в PictureBox.

    4. Вот код главной формы:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1_Load);
        }
    
        Image[] _images = null;
    
        void Form1_Load(object sender, EventArgs e)
        {
            _images = new Image[3];
            for (int i = 0; i < _images.Length; i++)
            {
                _images[i] = Image.FromFile(string.Format(@"g:\Images\{0}.jpg", i));
            }
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2(_images);
            form.Show();
        }
    }

    Как видите, я загружаю картинки в массив и при нажатии на кнопку создаю новую форму (передав массив картинок) и показываю ее.

    Все.

    Если запустить приложение, то можно понажимать на кнопку главной формы, откроются дочерние, а в них можно выбирать номер картинки в массиве и смотреть картинку:

    Предложенный варинт не является единственно правильным, вы также можете реализовать доступ к массиву в виде свойства, как предложил INFEL8

    • Предложено в качестве ответа YatajgaEditor 21 июля 2012 г. 9:46
    • Помечено в качестве ответа Abolmasov Dmitry 23 июля 2012 г. 11:58
    17 июля 2012 г. 6:36
    Отвечающий

Все ответы

  • А что значит "в другой форме" ?
    16 июля 2012 г. 10:57
    Модератор
  • Предположим, что у него массив имагов определён в классе формы (например Form1 : Form ).
    Если думать из этого предположения, то идём дальше.

    Тогда другой формой будет или другой класс формы, или экземпляр этого же класса.
    Тут развилка:
    Или элемент массива сам лежит в другой форме,
    или же в той форме должно быть обращение к элементу массива, который лежит в "этой" форме.

    В обоих случаях, для обращения к элементу массива, нужно сделать его доступным.
    Может быть у него в этом и получилась проблема.

    Тут новая развилка.
    Лежит ли класс формы (или в чём там массив) в той же сборки что и вторая форма (или откуда обращается),
    или же в другой сборке.
    Если в той же, то можно поставить internal модификатор на массив, и, если надо, то на экземпляр формы.
    Если в другой сборке, то public.

    В принципе должно помочь, если все предположения окажутся верными.

    Если надо отовсюду обращаться, и чтобы не являлось членом экземпляра класса,
    то ещё static можно приплести. Но ими лучше не сильно увлекаться, а то получится что-то вроде глобальных переменных, записью в реестр или заголовочных файлов и тд.


    • Изменено INFEL8 16 июля 2012 г. 14:06
    • Помечено в качестве ответа Abolmasov Dmitry 23 июля 2012 г. 11:58
    16 июля 2012 г. 13:58
  • Если вы используете WinForms, то вашу задачу можно решить следующим способом:

    1. Я для демонстрационных целей создал папку G:\Images и записал в нее картинки 0.jpeg, 1.jpeg, 2.jpeg

    2. Добавил в решение еще одну форму. На первую кинул кнопку, на вторую NumericUpDown, Button и PictureBox.

    3. Код для второй формы у меня имеет вид:

    public partial class Form2 : Form
    {
        public Form2(Image[] p_images)
        {
            InitializeComponent();
            _images = p_images;
        }
    
        Image[] _images = null;
    
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.Image = _images[(int)numericUpDown1.Value];
        }
    }

    Как видите, для создания второй формы, в конструктор необходимо передать ссылку на массив изображений, при выборе в NumericUpDown числа (номер картинки в массиве) и нажатии на кнопку, картинка грузится в PictureBox.

    4. Вот код главной формы:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1_Load);
        }
    
        Image[] _images = null;
    
        void Form1_Load(object sender, EventArgs e)
        {
            _images = new Image[3];
            for (int i = 0; i < _images.Length; i++)
            {
                _images[i] = Image.FromFile(string.Format(@"g:\Images\{0}.jpg", i));
            }
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2(_images);
            form.Show();
        }
    }

    Как видите, я загружаю картинки в массив и при нажатии на кнопку создаю новую форму (передав массив картинок) и показываю ее.

    Все.

    Если запустить приложение, то можно понажимать на кнопку главной формы, откроются дочерние, а в них можно выбирать номер картинки в массиве и смотреть картинку:

    Предложенный варинт не является единственно правильным, вы также можете реализовать доступ к массиву в виде свойства, как предложил INFEL8

    • Предложено в качестве ответа YatajgaEditor 21 июля 2012 г. 9:46
    • Помечено в качестве ответа Abolmasov Dmitry 23 июля 2012 г. 11:58
    17 июля 2012 г. 6:36
    Отвечающий
  • Пожалуйста, не забывайте отмечать сообщения, являющиеся решением проблемы. Спасибо.


    Для связи [mail]

    23 июля 2012 г. 11:58