Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: VB .NET и события dll Добавлено: 09.06.10 09:36  

Автор вопроса:  Maloi
Доброго времени суток, всем.
Ни как не могу подписаться на события определённые в сторонней dll. Раньше не работал с этим. Хотя на C# все работает хорошо.

public dllClass v1 = new dllClass();

public vod Test
{
...
v1.metod = new metod(v1);
v1.metod.dllEventHandler += new dllEventHandler(Test1);
...
}

public void Test1(object sender, dllEventArgs e)
{
...;
}

Пример не самый лучший конечно. Подскажите пожалуйста, как то же реализовать на VB .NET.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #1 Добавлено: 09.06.10 09:57
  1.  
  2. Imports System
  3. Imports System.Runtime
  4. Imports System.Runtime.Remoting
  5. Imports System.Reflection
  6.  
  7. Public Class Form1
  8.  
  9. Private ctl As Object ' TestControlLib.TestControl
  10.  
  11. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  12.    ' Loadind TestControl from DLL ....
  13.    Dim Oh As ObjectHandle = Activator.CreateInstanceFrom("TestControlLib.dll", "TestControlLib.TestControl")
  14.    ctl = oh.Unwrap()
  15.    Call Me.Controls.Add(ctl)
  16.    CType(ctl, Control).Location = New Drawing.Point(20, 20)
  17.    ' Adding SecondChanged Event Handler ....
  18.    Dim t As System.Type = ctl.GetType()
  19.    Dim ei As EventInfo = t.GetEvent("SecondChanged")
  20.    Call ei.AddEventHandler(ctl, [Delegate].CreateDelegate(ei.EventHandlerType, Me, "ctl_SecondChanged"))
  21. End Sub
  22.  
  23. Private Sub ctl_SecondChanged() ' Handles ctl.SecondChanged
  24.    If ctl.BorderStyle = 0 Then
  25.       ctl.borderStyle = 1
  26.    Else
  27.       ctl.borderStyle = 0
  28.    End If
  29.    Me.Text = ctl.time
  30. End Sub
  31.  
  32. End Class

Ответить

Номер ответа: 2
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #2 Добавлено: 09.06.10 10:00
а в dll:
  1. Public Class TestControl
  2.  
  3. <Serializable()> _
  4. Public Enum TestControlBorderStyle
  5.    None = 0
  6.    Raised = 1
  7. End Enum
  8.  
  9. Public Event SecondChanged()
  10.  
  11. Private _second As Integer
  12. Private _bstyle As TestControlBorderStyle = TestControlBorderStyle.None
  13.  
  14. Private Sub TestControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  15.    Timer1.Enabled = True
  16. End Sub
  17.  
  18. Private Sub TestControl_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
  19.    e.Graphics.DrawString(Me.Time, Font, SystemBrushes.ControlText, 16, 16)
  20.    If _bstyle <> TestControlBorderStyle.None Then
  21.       Call ControlPaint.DrawBorder3D(e.Graphics, Me.ClientRectangle, Border3DStyle.Raised)
  22.    End If
  23. End Sub
  24.  
  25. Public Shadows Property BorderStyle() As TestControlBorderStyle
  26.  Get
  27.     Return _bstyle
  28.  End Get
  29.  Set(ByVal value As TestControlBorderStyle)
  30.     If value = _bstyle Then Return
  31.     _bstyle = value
  32.     Call Invalidate()
  33.  End Set
  34. End Property
  35.  
  36. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  37.    Dim s As Integer = Now.TimeOfDay.Seconds
  38.    If s <> _second Then
  39.       _second = s
  40.       ' -------------------------------------
  41.       RaiseEvent SecondChanged()
  42.       ' ---------------------------------------
  43.       Call Invalidate()
  44.    Else
  45.       _second = s
  46.    End If
  47. End Sub
  48.  
  49. Public ReadOnly Property Time() As String
  50.  Get
  51.     Dim h As String = CStr(Now.Hour) : If h.Length = 1 Then h = "0" & h
  52.     Dim m As String = CStr(Now.Minute) : If m.Length = 1 Then m = "0" & m
  53.     Dim s As String = CStr(Now.Second) : If s.Length = 1 Then s = "0" & s
  54.     Return h & ":" & m & ":" & s
  55.  End Get
  56. End Property
  57.  
  58. End Class

Ответить

Номер ответа: 3
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #3 Добавлено: 09.06.10 10:01
Пример чужой, но работает

Ответить

Номер ответа: 4
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #4
Добавлено: 09.06.10 10:25
лажа с рефлекшн


вот длл:
  1. Public Class Class1
  2.     Public Event event1(ByVal str As String)
  3.     Private timer As Timers.Timer
  4.     Public Sub New()
  5.         timer = New Timers.Timer(2000)
  6.         AddHandler timer.Elapsed, AddressOf timer_Elapsed
  7.         timer.Start()
  8.     End Sub
  9.     Private Sub timer_Elapsed(ByVal e As Object, ByVal args As Timers.ElapsedEventArgs)
  10.         RaiseEvent event1(Date.Now.ToString())
  11.     End Sub
  12. End Class



приложение:
  1. Public Class Form1
  2.  
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         Dim obj As New ClassLibrary1.Class1()
  5.         AddHandler obj.event1, AddressOf obj_event1
  6.     End Sub
  7.  
  8.     Private Sub obj_event1(ByVal str As String)
  9.         MsgBox(str)
  10.     End Sub
  11. End Class

Ответить

Номер ответа: 5
Автор ответа:
 Maloi



Вопросов: 20
Ответов: 28
 Профиль | | #5 Добавлено: 09.06.10 10:50
В варианте Сергея, возникает ошибка на вызове и как то громадно. С помощью AddHandler все заработало. До этого пробовал его, но не работало, видимо что то не так делал). Всем огромное спасибо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам