Помогите перевести с Chrome(Pascal.net) на Vb.net

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

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

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Помогите перевести с Chrome(Pascal.net) на Vb.net

Сообщение EXIS » 29.08.2007 (Ср) 11:53

В хроме код подписывается на событие следующим образом

Код: Выделить всё
my_Tr : TrData

...

my_Tr.Connected += new EventHandler<ConnectionEventArgs>(TrConnected);

...

method MainForm.TrConnected (sender: System.Object; e: ConnectionEventArgs);
begin
    ....
end;


В VB я пишу:

Код: Выделить всё
Dim WithEvents my_Tr As TrData

...

AddHandler my_Tr.Connected, AddressOf my_Tr_Connected

...

Private Sub my_Tr_Connected(ByVal sender As Object, ByVal e As ConnectionEventArgs) Handles my_Tr.Connected
       ...
End Sub


Может на события надо подписываться с помощью других методов не addHandler А что нибудь другое. Вообщем прога не реагирует на события, хотя они по идее происходят в чем ошибка?

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

Сообщение Viper » 29.08.2007 (Ср) 13:02

AddHandler в данном случае лишний, должно хватить WithEvents, если не происходят события, то значит траблы где-то за приделами приведенных трех строк кода.
Весь мир матрица, а мы в нем потоки байтов!

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Сообщение EXIS » 30.08.2007 (Чт) 8:18

Viper

Постараюсь по подробнее:

MainFormTK = public class(System.Windows.Forms.Form)
{$REGION Windows Form Designer generated fields}
private
//Создаем приватный экземпляр класса
my_Tr: TrData;
method InitializeComponent;
{$ENDREGION}

method MainFormTK.button1_Click(sender: System.Object; e: System.EventArgs);
begin
// Получаем ссылку на модель данных
my_Tr := TrModule.Tr;

// Подписываемся на события eventы
my_Tr.Loaded += new EventHandler(TrLoaded);
my_Tr.Connected += new EventHandler<ConnectionEventArgs>(TrConnected);
end;

// Сообственно обработчики событий
method MainFormTK.TrLoaded(sender: System.Object; e: System.EventArgs);
begin
ListBox1.Items.Add('Пошли данные');
end;

method MainFormTK.TrConnected (sender: System.Object; e: ConnectionEventArgs);
begin
ListBox1.Items.Add('Конект '+e.Authenticated.ToString);
end;


И вот как это перевести на VB?
я делаю так


Код: Выделить всё
Public Class Form1
    'Cоздаем экземпляр класса
    Dim WithEvents my_Tr As ITrData

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      ' Получаем ссылку на модель данных
        my_Tr = TrModule.Tr
       'Подписываемся на события eventы
        AddHandler my_Tr.Loaded, AddressOf my_Tr_Loaded
        AddHandler my_Tr.Connected, AddressOf my_Tr_Connected

    End Sub

    'Сообственно обработчики событий
    Private Sub my_Tr_Loaded(ByVal sender As Object, ByVal e As System.EventArgs)
        ListBox1.Items.Add("Пошли данные")
    End Sub

    Private Sub my_Tr_Connected(ByVal sender As Object, ByVal e As ConnectionEventArgs)
        ListBox1.Items.Add("Конект " + e.Authenticated.ToString)
    End Sub
End Class


В чем ошибка без адд хендлер не как, может всетаки объявить евенты как-то по другому?

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

Сообщение Viper » 30.08.2007 (Чт) 9:24

Я не знаю, что у тебя за класс такой и происходят ли у него на самом деле какие-либо события, но вот тебе пример, где оба способа работают вполне нормально:
Код: Выделить всё
Public Class Form1
    Private WithEvents pMyClass As New ClassWithEvents
    Private pMyClass2 As New ClassWithEvents
    Private Sub ClassWithEvents_MyEvent(ByVal Number As Integer) Handles pMyClass.MyEvent
        MessageBox.Show("Event raised with number = " & Number)
    End Sub
    Private Sub btnEventRaiser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEventRaiser.Click
        pMyClass.RaiseMyEvent(100)
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        AddHandler pMyClass2.MyEvent, AddressOf ClassWithEvents_MyEvent
    End Sub
    Private Sub btnEventRaiser2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEventRaiser2.Click
        pMyClass2.RaiseMyEvent(200)
    End Sub
End Class
Public Class ClassWithEvents
    Public Sub RaiseMyEvent(ByVal Number As Integer)
        RaiseEvent MyEvent(Number)
    End Sub
    Public Event MyEvent(ByVal Number As Integer)   
End Class


Код должен быть помещен в модуль формы, на форме должны лежать кнопки btnEventRaiser и btnEventRaiser2. Первая кнопка пинает событие для первого экземпляра класса, объявленного с ключевым словом WithEvents, вторая кнопка пинает событие для второго экзеспляра класса, который объявлен без WithEvents, но обработчик события добавлен при помощи AddHandler. Все работает как часы
Весь мир матрица, а мы в нем потоки байтов!


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

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

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

    TopList