Подскажите решение (activ Controls In Runtime)

Тема в разделе "Visual Basic", создана пользователем Maxim84, 8 окт 2010.

  1. Maxim84

    Maxim84 Гость

    Здравствуйте!
    Я пишу игровой движок с нуля, для РПГ. Сделал уже систему инвентаря на Drag and Drop как в Diablo. Сейчас подошла очередь делать систему вытаскивания шмоток из сундуков. Проблема в том, что в моём движке, каждая вещь выглядит как отдельный PictureBox, в котором забита начинка, как картинка, свойства и параметры которая прибавляет вещь. Теперь самое главно! Так как я не собираюсь под каждый сундук создавать отдельный PictureBox, я бы хотел просто копировать их с шаблона. Тоесть функционал такой, открыл сундук, на рандоме выпадает шмотка, которая появляется как PictureBox, этот PictureBox вызывается с формы где лежат все шмотки из игры. Примерно так. У меня получаеться вызывать PictureBox оператором Load, но это только на один раз. А надо что бы они копировались в сундук а не перемещались. Так как же решить поставленную задачу? Если кто писал что то подобное поделитись пожалйста идеями, ну и примерами если можно.

    Заранее спасибо!

    з.ы. Пишу на VB 6.0 Изучаю VB по мере написания движка. Так что если для кого -то вопрос кажится глупым, ИЗВИНИТЕ!

    Что нить из этой опиры, только с PicBox и загрузкой и с копированием его на другую форму.
     
  2. Serrr

    Serrr Гость

    Попробуйте так:

    Во-первых свою кнопку объявить как NEW COMMANDBUTTON

    Во-вторых перед "Controls.Add("VB.CommandButton", "NewButton") " поставить имя той формы, куда надо ставить этот PictureBox,
    например Form1.Controls.Add("VB.CommandButton", "NewButton")
     
  3. Maxim84

    Maxim84 Гость

    Извините, не могли бы по подробний об этом. Не очень понимаю. Для меня работа с контроллами новая наука.
    Большое спасибо!
     
  4. Serrr

    Serrr Гость

    Private WithEvents NewButton As CommandButton заменить на Private WithEvents NewButton As New CommandButton - в этом случае вы сообщите системе, что хотите создать новый экземпляр класса (копию) контрола.

    далее, в обработчике события какой-нибудь переменной (Ddd например) присваеваем значение этой вашей NewButton:

    Dim Ddd = NewButton

    потом можно ей параметры разные задать:

    Ddd.Height=33 например и т.д.

    А потом уже добавляем на форму, где этот контрол должен появиться

    Form1.Controls.Add(Ddd)

    Должно получиться
     
  5. Maxim84

    Maxim84 Гость

    Я понял Вашу идею, но тогда нужно создавать новый класс, потому что в этом случае, New не распoзнаёт CommandButton, и выдаёт синтаксическую ошибку Compil Error (Invalid use of New key word ). А я как раз только что классы начал изучать. Так что чуствую придёться по париться. ))))

    Тогда наверное лучше, поставить вопрос ребром, и спросить, - "Как создать новый класс для кнопки?" . Спасибо Вам за внимание и ответы.
     
  6. Serrr

    Serrr Гость

    Не понял... вам нужна копия шмотки, которая представляет собой PictureBox?
    Если где-то на другой форме уже есть готовый ПиктуреБокс с картинкой шмотки, то
    Public Ddd as New ПиктуреБокс
    Ddd=ИмяФормыГдеЛежитПитуреБокс.ИмяПиктуреБокса

    а кнопку тогда трогать не надо
     
  7. Maxim84

    Maxim84 Гость

    Я пока что на кнопке учусь. ))) Потому про кнопку и говорю. Сечас попробую, как вы говорите. Может получится.
     
  8. Maxim84

    Maxim84 Гость

    Добавляем все контролы на формы. В форму1 вводим код!

    Private Sub Command1_Click()
    Dim Ddd As New PictureBox

    Ddd = Forma2.Picture1
    Form1.Controls.Add (Ddd)

    End Sub

    На форме2 создана картинка Picture1. Выводит ошибку "Invalid USE of key words" ... Я писал об этом выше, в примере с кнопкой... Ощущение что я что то забыл добавить...
     
  9. Serrr

    Serrr Гость

    Picture1 - это имя PictureBox_a или картинки?
     
  10. Maxim84

    Maxim84 Гость

    Спасибо что вы не бросили тему просто так, а решили разобраться с моей пробеломй до конца. Picture1 это стандартное имя PictureBox по умолчянию.
    Тут всё чётко. Пробовал разобраться с классами, но гемор ещё тот. Чувствуеться мне что класс надо новый создавать, что бы вот так вот делать как вы говорите...
     
  11. Serrr

    Serrr Гость

    По-моему не надо создавать новый класс. Ведь ПиктуреБокс это и есть класс. Дело в том, как его экземпляр создать, то есть разобраться что чему присваивать.. Я-то писал применительно к VB.NET А это чуть по-другому.
    Попробуйте

    Set Ddd = Forma2.Picture1
     
  12. Maxim84

    Maxim84 Гость

    Serrr. Спасибо за помощь. Я решил проблему за счёт Index As Integer. В моём случае идеальный вариант оказался. Тему можно закрыть.
    1. Создаёшь пикбокс шмотки на отдельной странице как и говорилось, ставишь индекс ноль, в распихиваешь шмот по сундукам, и вызываешь коммандой Load. Очень удобно.
     
Загрузка...

Поделиться этой страницей