Массив PictureBox.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Массив PictureBox.

Сообщение SlaDER » 30.07.2006 (Вс) 17:38

У меня такая проблема: мне нужно создать поле из картинок.
Поле: 360x360
Картинок: 10x10 размером соответственно 36x36.

А теперь суть проблемы: я не могу через код создать ни одну картинку, вроде ошибок нет и все нормально, но картинка не отображается.
Я и Visible ставил и многое пробовал никак вообще. Только через интерфейс. Но нужно не просто создать одну картинку, а организовать некий их массив (или коллекцию).
Помогите пожалуста.!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.07.2006 (Пн) 7:35

Вопрос требует конкретики. или код в студию!

З.Ы. Убрал неоднохначность понимания
Последний раз редактировалось Viper 31.07.2006 (Пн) 10:50, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 31.07.2006 (Пн) 8:44

Просто фрагмент кода, если можно.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 31.07.2006 (Пн) 9:59

:)
SlaDER

"Насчет код в студию" - это к тебе относится, покажи свой код

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 31.07.2006 (Пн) 12:10

В том то и вопрос, что я не знаю как это реализовать.
Есть вариант сделать 100 Picture Box, но это извращение.

Кто уже создавал через код напишите, пожалйста как. :?:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Массив PictureBox.

Сообщение Viper » 31.07.2006 (Пн) 12:26

SlaDER писал(а):А теперь суть проблемы: я не могу через код создать ни одну картинку, вроде ошибок нет и все нормально, но картинка не отображается.
Я и Visible ставил и многое пробовал никак вообще. Только через интерфейс. Но нужно не просто создать одну картинку, а организовать некий их массив (или коллекцию).
Помогите пожалуста.!


сказанное вроде бы говорит о том, что какие то действия по созданию массива картинок предпринимались автором, но вот какие? Телепат щас занят, так что код в студию!
Весь мир матрица, а мы в нем потоки байтов!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 31.07.2006 (Пн) 12:35

Телепат случайно удалил ярлык "Свернуть все окна". Нащёл(я ему кинул). От инета отключился. Посему за него я.

ИМХО человеку нужно примерна так
|-------------|------------|------------|------------|
|картинка|картинка|картинка|картинка|
|-------------|------------|------------|------------|
|картинка|картинка|картинка|картинка|
|-------------|------------|------------|------------|
|картинка|картинка|картинка|картинка|
|-------------|------------|------------|------------|
И всё это програмно.
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.07.2006 (Пн) 12:54

Дык это то вроде понятно. Непонятно что ему (автору) еще непонятно, а что уже понятно.

То ли у него где-то эти 100 картинок хранятся и он не может их загрузить/расположить как надо/что-то еще. То ли ему надо эти 100 картинок как-то сгенерить предварительно. То ли есть какие-то еще варианты...
Весь мир матрица, а мы в нем потоки байтов!

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 31.07.2006 (Пн) 12:55

Да именно так!

Я делал так с одним объектом и не работает!
Например так в событии form_load:

pictureBox1 = new PictureBox();
pictureBox1.BackColor = System.Drawing.SystemColors.ActiveCaption;
pictureBox1.Location = new System.Drawing.Point(108, 72);
pictureBox1.Name = "pictureBox1";
pictureBox1.TabIndex = 0;
pictureBox1.TabStop = false;

А как делать массив из Picturebox я не знаю или вообще нельзя сделать массив, нужна коллекция?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 31.07.2006 (Пн) 12:55

А вот и рабочий код:
Код: Выделить всё
Dim npb As System.Windows.Forms.PictureBox

        Dim n As Integer, n2 As Integer
        For n = 1 To 10
            For n2 = 1 To 10
                npb = New System.Windows.Forms.PictureBox
                Me.Controls.Add(npb)
                npb.Visible = True
                npb.Left = n * 36
                npb.Top = n2 * 36
                npb.Width = 36
                npb.Height = 36
                npb.BorderStyle = BorderStyle.Fixed3D

            Next
        Next

Решётка прекрасно создаётся. Если надо то ссылки на npb можно сохранять в двухмерномм массиве
Изображение

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 31.07.2006 (Пн) 13:51

Спасибо за помощь, посмотрю.

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 31.07.2006 (Пн) 14:39

Спасибо! У все получилось, просто я не знал про Controls.Add() вот и не было на форме картинки.
У меня есть еще один вопрос:

В ваш код я добавляю 2 строчки:

npb.Name="pb"+n*n2 'Имя картинки
npb.Click += new System.EventHandler(pbClick) 'Событие Click


И теперь кликая по любой картинке вызывается метод:

private sub pbClick(object sender, System.EventArgs e)

MsgBox ("Привет!")

end sub

Возможно ли сделать такое событие, чтобы при клике на картинке на экран выводилось имя именно той картинки по которой кликнули?
Т.е. при клике на pb1 в MsgBox будет pb1 и т.д. Чтобы мне не писать 100 событий!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.07.2006 (Пн) 14:52

Элементарно:
Код: Выделить всё
Private Sub pbClick(ByVal sender As Object,ByVal e As System.EventArgs)
    MsgBox CType(sender,PictureBox).Name
End Sub
Весь мир матрица, а мы в нем потоки байтов!

SlaDER
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 06.10.2005 (Чт) 16:54

Сообщение SlaDER » 31.07.2006 (Пн) 15:33

Все спасибо, что терпели меня!

Heimdall
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 12.11.2006 (Вс) 7:09

Сообщение Heimdall » 12.11.2006 (Вс) 7:26

хм.. продолжу тему так как у меня похожая ситуация

делаю все как указано в данном топике, но у меня в строчке
SlaDER писал(а):npb.Click += new System.EventHandler(pbClick) 'Событие Click

выдает 2 ошибки, а именно:
1) 'Public Event Click(sender as Object, e as System.EventsArgs)' is an event and cannot be called directly.
2) 'System.EventHandler' is a delegate type and requires a single 'addressof' expression as the only argument to the constructor

Может у меня VB.NET какой то не такой? :roll: :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.11.2006 (Вс) 8:34

Это синтаксис C#. В VB используется AddHandler.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Heimdall
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 12.11.2006 (Вс) 7:09

Сообщение Heimdall » 12.11.2006 (Вс) 8:54

эээ... а пример кода можно?

заменил строчку на:
Код: Выделить всё
AddHandler npb.Click, pbClick(npb)


с функцией вызова:
Код: Выделить всё
Private Function pbClick(ByVal sender As System.Object)
        MsgBox("ТестКлик")
        Return 1
End Function


Мессага вылетает в момент создания обьекта, а не в момент клика

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.11.2006 (Вс) 8:58

RTFM.
AddHandler npb.Click, AddressOf pbClick
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Heimdall
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 12.11.2006 (Вс) 7:09

Сообщение Heimdall » 12.11.2006 (Вс) 12:49

спасибо, вроде работает..

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

Вопросик такой - Как открыть файл программой ассоциированной с этим файлом в ОС? Я попробовал использовать shell(), но он открывает исполняемый файлы, а например открыть файл типа txt программой ассоциированой с txt в системе не может. Желательно это сделать без обращения к реестру, я понимаю что можно проанализировать расширение файла и найти в реестре прогу которая с ней ассоциирована, но мне кажется что в VB.NET должна быть команда выполняющая подобную функцию

В общем, для ясности мне нужен аналог командной строки. Если я в командной строке наберу "C:\text.doc", то мне ОС запустит MSWord и откроет им этот документ, а вот при попытке shell("C:\text.doc") выдается критическая ошибка..

З.Ы. может я неправильно использую shell?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.11.2006 (Вс) 13:02

Heimdall, чтение документации помогает. Помогает избежать пинков и плюсов за подобные вопросы. Это последний раз.
http://msdn.microsoft.com/library/rus/d ... Topic3.asp
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList