Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа класса с внешним обектом. / 8 сообщений из 8, страница 1 из 1
09.06.2007, 15:28
    #34586392
Itehis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Проблема вот в чем: мне нужно, чтобы внутри класса происходила обработка ивента "MouseDown"
Однако обьект(PictureBox) находится в основной форме(Class Form1), а не в созданом мной новом классе.

Конечно, можно получить этот обьект так:
Код: plaintext
Public Sub New(ByVal DrawWindow As System.Windows.Forms.PictureBox)

Но как заставить его обрабатывать ивент "MouseDown" по этому обьекту? У меня есть следуещее:

Код: plaintext
Private Sub DrawWindow_MouseDown(ByVal sender As Object, By Val e As System.Windows.Forms.MouseEvent.Args) Handles DrawWindow.MouseDown

Как свзять эти два Саб-а? Один в другой всунуть не выйдет похоже, видимо нужна другая форма записи...
...
Рейтинг: 0 / 0
09.06.2007, 16:27
    #34586516
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Если я правильно понял, вам надо подписаться на события PictureBox.
Это делается так:
В классе объявлется переменная
Код: plaintext
Private WithEvents m_PictureBox1 as PictureBox
Теперь на ее события можно подписаться. Выбираете эту переменну в окне редактора кода ее слева, и нужное событие справа.
У вас получится вот это:
Код: plaintext
1.
2.
Private Sub m_PictureBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

End Sub
В процедуре инициализации класса (если таковой нет -создайте) надо передать ссылку:
Код: plaintext
1.
2.
Public Sub Initialize(byval PictrueBoxContainer as PictureBox)
   Set m_PictureBox1 = PictrueBoxContainer 
End Sub
Создавая экземпляр этого класса, добавляете вызов инициализации:
Код: plaintext
1.
Dim Obj As MyClass
Obj.Initialize Picture1
Все готово к работе
...
Рейтинг: 0 / 0
09.06.2007, 17:50
    #34586683
Itehis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Ошибок с виду нет. Но дальше инициализации и передачи ссылки дело не идет.
Во время работы программы при клике на "PictureBox" просто ничего не происходит. Как будто я ни накакие события "MouseDown" не подписывался.
...
Рейтинг: 0 / 0
09.06.2007, 18:49
    #34586781
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
...
Рейтинг: 0 / 0
09.06.2007, 19:27
    #34586816
Itehis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Извиняюсь, не обратил внимание на версию. У меня MVB 2005. Видимо синтаксис несколько другой нужен. Из выше приведенного примера, после апгрейда и редактирования, получилась таже проблема. Не перехватывает ивент...
...
Рейтинг: 0 / 0
09.06.2007, 19:46
    #34586823
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Свой пример я делала под VB6.
Не знаю, обратили Вы внимание на то обстоятельство, что в примере Startup Object’ом является процедура Main (это устанавливается в свойствах проекта). Опять же, не знаю, как там все устроено в VB 2005. Попробуйте добавить в класс формы код:
Код: plaintext
1.
2.
Private Sub Form_Load()
  Call Main
End Sub
...
Рейтинг: 0 / 0
09.06.2007, 21:41
    #34586885
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Есть форум VB.NET для таких вопросов.
Но раз уж обратились, получайте ответ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Public Class Form1

   Private Class MyClass1
      Private WithEvents m_PictureBox1 As Windows.Forms.PictureBox
      Private m_Label1 As Label

      Public Sub New(ByVal PictureContainer As Windows.Forms.PictureBox)
         m_PictureBox1 = PictureContainer
         m_Label1 = New Label()
         m_Label1.Parent = m_PictureBox1
         m_Label1.Visible = True
         m_Label1.Location = New Point( 1 ,  1 )
         m_Label1.AutoSize = True
      End Sub

      Private Sub m_PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles m_PictureBox1.MouseMove
         m_Label1.Text = "X=" & e.X & vbCrLf & "Y=" & e.Y
      End Sub
   End Class

   Private m_PictureBox1 As PictureBox
   Private m_Object As MyClass1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      m_PictureBox1 = New PictureBox
      m_PictureBox1.Parent = Me
      m_PictureBox1.Dock = DockStyle.Left
      m_PictureBox1.Width = Me.Width \  2 
      m_PictureBox1.BorderStyle = BorderStyle.FixedSingle
      m_PictureBox1.Visible = True
      m_Object = New MyClass1(m_PictureBox1)
   End Sub
End Class
...
Рейтинг: 0 / 0
11.06.2007, 03:16
    #34587644
Itehis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса с внешним обектом.
Да, все верно, благодарю за помощь.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа класса с внешним обектом. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]