S
Serrr
Всем здравствуйте.
Создал класс (просто, чтобы разобраться в этой теме)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"текст класса"</div></div><div class="sp-body"><div class="sp-content">
Public Class Peremen
Private VL As Integer
Private Txt As String = "Peremen "
Private Nme
Public Event Kr(ByVal sender As Object, ByVal c As String)
Public Sub New()
Dim ff As Integer = Form1.Coun
Nme = Txt & ff
Form1.Coun += 1
End Sub
Public ReadOnly Property Name() As String
Get
Name = Nme
End Get
End Property
Public Property Vall() As Integer
Get
Vall = VL
End Get
Set(ByVal value As Integer)
VL = value
End Set
End Property
Public ReadOnly Property Kvadrat()
Get
Kvadrat = VL ^ 2
If Kvadrat / 6 = Int(Kvadrat / 6) Then
RaiseEvent Kr(Me, "квадрат кратен 6")
End If
End Get
End Property
Public ReadOnly Property Kub()
Get
Kub = VL ^ 3
If Kub / 4 = Int(Kub / 4) Then
RaiseEvent Kr(Me, "куб кратен 4")
End If
End Get
End Property
и класс формы соответственно, тоже есть:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"класс формы"</div></div><div class="sp-body"><div class="sp-content">
Public Class Form1
Public Coun As Integer = 0
Private Coll As New Collection
WithEvents F As Peremen
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Text <> "" And IsNumeric(TextBox1.Text) And ListBox1.SelectedItem <> Nothing Then
Dim f = CType(Coll.Item(ListBox1.SelectedItem), Peremen)
f.Vall = Val(TextBox1.Text)
Label1.Text = f.Vall & " " & f.Kvadrat & " " & f.Kub
Else
Label1.Text = ""
End If
End Sub
Private Sub KRT(ByVal sender As Object, ByVal c As String) Handles F.Kr ' это обработчик события
Label2.Text = sender.name
Label3.Text += " : " & c
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
F = New Peremen
Coll.Add(F, F.Name)
ListBox1.Items.Add(F.Name)
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Label2.Text = ""
Label3.Text = ""
TextBox1.Text = CType(Coll.Item(ListBox1.SelectedItem), Peremen).Vall
End Sub
End Class
при нажатии кнопки на форме в ListBox добавляется имя экземпляра класса Peremen, и в коллекцию Coll добавляется сам экземпляр класса.
при ListBox_SelectedIndexChanged значение Vall выбранного экземпляра присваивается в TextBox.Text (такой тоже имеется на форме).
при изменении текста в TextBox, Val(этого текста) присваивается выбранному в ListBox_е экземпляру Peremen.
а в самом классе Peremen при вычислении куба и квадрата значения включаются события (Raise Event, насколько я понял)
Событие выражается в присваивании текста Label_ам
Теперь ВОПРОС знатокам:
почему событие происходит только при изменении значения последнего созданного экземпляра?
Насколько я читал литературу, понимаю - класс создал экземпляр и забыл о нём при создании следующего. Может, читал неправильно... Но не могу понять, как заставить все экземпляры класса включать свои события.
Создал класс (просто, чтобы разобраться в этой теме)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"текст класса"</div></div><div class="sp-body"><div class="sp-content">
Код:
Public Class Peremen
Private VL As Integer
Private Txt As String = "Peremen "
Private Nme
Public Event Kr(ByVal sender As Object, ByVal c As String)
Public Sub New()
Dim ff As Integer = Form1.Coun
Nme = Txt & ff
Form1.Coun += 1
End Sub
Public ReadOnly Property Name() As String
Get
Name = Nme
End Get
End Property
Public Property Vall() As Integer
Get
Vall = VL
End Get
Set(ByVal value As Integer)
VL = value
End Set
End Property
Public ReadOnly Property Kvadrat()
Get
Kvadrat = VL ^ 2
If Kvadrat / 6 = Int(Kvadrat / 6) Then
RaiseEvent Kr(Me, "квадрат кратен 6")
End If
End Get
End Property
Public ReadOnly Property Kub()
Get
Kub = VL ^ 3
If Kub / 4 = Int(Kub / 4) Then
RaiseEvent Kr(Me, "куб кратен 4")
End If
End Get
End Property
Код:
и класс формы соответственно, тоже есть:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"класс формы"</div></div><div class="sp-body"><div class="sp-content">
Код:
Public Class Form1
Public Coun As Integer = 0
Private Coll As New Collection
WithEvents F As Peremen
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Text <> "" And IsNumeric(TextBox1.Text) And ListBox1.SelectedItem <> Nothing Then
Dim f = CType(Coll.Item(ListBox1.SelectedItem), Peremen)
f.Vall = Val(TextBox1.Text)
Label1.Text = f.Vall & " " & f.Kvadrat & " " & f.Kub
Else
Label1.Text = ""
End If
End Sub
Private Sub KRT(ByVal sender As Object, ByVal c As String) Handles F.Kr ' это обработчик события
Label2.Text = sender.name
Label3.Text += " : " & c
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
F = New Peremen
Coll.Add(F, F.Name)
ListBox1.Items.Add(F.Name)
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Label2.Text = ""
Label3.Text = ""
TextBox1.Text = CType(Coll.Item(ListBox1.SelectedItem), Peremen).Vall
End Sub
End Class
Код:
при нажатии кнопки на форме в ListBox добавляется имя экземпляра класса Peremen, и в коллекцию Coll добавляется сам экземпляр класса.
при ListBox_SelectedIndexChanged значение Vall выбранного экземпляра присваивается в TextBox.Text (такой тоже имеется на форме).
при изменении текста в TextBox, Val(этого текста) присваивается выбранному в ListBox_е экземпляру Peremen.
а в самом классе Peremen при вычислении куба и квадрата значения включаются события (Raise Event, насколько я понял)
Событие выражается в присваивании текста Label_ам
Теперь ВОПРОС знатокам:
почему событие происходит только при изменении значения последнего созданного экземпляра?
Насколько я читал литературу, понимаю - класс создал экземпляр и забыл о нём при создании следующего. Может, читал неправильно... Но не могу понять, как заставить все экземпляры класса включать свои события.