Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: привязка события Добавлено: 15.04.08 19:42  

Автор вопроса:  __Pavel__ | Web-сайт: ммм.сайта.НЕТ
в моем проекте есть переменная PathSave как привязать к ней следующее:

    Private Sub PathSaveChanged()
        MsgBox("Переменная поменяла свое значение!")
    End Sub


?????????????????

Заранее благодарен!

Ответить

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

Номер ответа: 1
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #1
Добавлено: 15.04.08 21:30
либо я не так объяснил, либо никто не знает, либо это невозможно... хоть что нибудь ответьте! работа горит!

Ответить

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



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

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 15.04.08 22:50
:) ну, где она может поменять значение, там и проверяй, если это тестбокс например, то после ввода, ну или по ситуации где там

Ответить

Номер ответа: 3
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #3
Добавлено: 15.04.08 22:58
да все это я знаю... слишком много мест где она меняется! мне надо отлавливать ее изменение!

Для поля можно например прописать следующее:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            AddHandler Button1.Click, AddressOf Button_Click
    End Sub


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

    Private Sub PathSaveChanged()
        MsgBox("Переменная поменяла свое значение!";)
    End Sub

Ответить

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



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #4
Добавлено: 15.04.08 22:59
ой не для поля, а для кнопки... ну вы поняли =)

Ответить

Номер ответа: 5
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #5
Добавлено: 16.04.08 03:58
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  AddHandler Button1.Click, AddressOf Button_Click
End Sub

фигня какая-то :)
Private Sub PathSaveChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  MsgBox("Переменная поменяла свое значение!";)
End Sub

--

Cоздай класс, сделай свойство, например, Text, и когда оно будет меняться, вызывай соответствующее событие.

Public Event TextChange(ByVal sender As Object, ByVal e As MyEventArgs)

...
...
...
  Private _Text As String = String.Empty

  Public Property [Text];() As String
    Get
      Return _Pattern
    End Get
    Set(ByVal value As String)
      ...
      _Text = value
      ...
      Dim MyArg As New MyEventArgs() 'если надо, то нужно еще состряпать класс MyEventArgs
      RaiseEvent TextChange(Me, MyArg)
      ...
    End Set
  End Property

ну а дальше создаешь экземпляр этого класса, делаешь примерно то, что ты делал с кнопкой, и всё.

Ответить

Номер ответа: 6
Автор ответа:
 Yanex



ICQ: 387761649 

Вопросов: 32
Ответов: 169
 Web-сайт: Progr.Do.am
 Профиль | | #6
Добавлено: 16.04.08 13:10
Кстати, метод фиговый, но может помочь: =)

если переменная типа String, можно созать Лабел с ее именем, объявить как глобальный и вместо переменной изменять значение текста.

Ответить

Номер ответа: 7
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #7
Добавлено: 16.04.08 13:48
Кстати, метод фиговый,

обоснуй

Ответить

Номер ответа: 8
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #8
Добавлено: 16.04.08 15:10
to Yanex
вот насчет лейбола поподробней...

to Алексей
метод нормальный, на другом форуме так же ответили =)
НО! у меня МНОГО переменных! Обработчик ОДИН! Сами подумайте... создавать для каждой класс... неудобно, а вот насчет лейбола мне понравилось =) привязать изменение свойства текста всех лейблов к обработчику и все =)

Ответить

Номер ответа: 9
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #9
Добавлено: 16.04.08 15:14
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  AddHandler Button1.Click, AddressOf Button_Click
End Sub


фигня какая-то :)

Private Sub PathSaveChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  MsgBox("Переменная поменяла свое значение!";)
End Sub


неее... это вы не так поняли =)
первый код я написал для примера, а второй код это пример обработчика изменения ПЕРЕМЕННОЙ

Ответить

Номер ответа: 10
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #10
Добавлено: 16.04.08 15:43
Не вижу никаких проблем, а таскать с собой ящик яиц нет смысла, когда нужно только одно :)

МНОГО переменных! Обработчик ОДИН!

и в чем проблема, также самая кнопка:
Private Sub PathSaveChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
  MsgBox(CType(sender, Control).Name)
End Sub


а в случае со своим классом можно сделать все что угодно. Делаешь класс, как я выше написал, например:
Public Class MyObject
Public Event TextChange(ByVal sender As Object, ByVal e As MyEventArgs)

...
...
...
  Private _Text As String = String.Empty

  Public Property [Text];() As String
    Get
      Return _Pattern
    End Get
    Set(ByVal value As String)
      ...
      _Text = value
      ...
      Dim MyArg As New MyEventArgs() 'если надо, то нужно еще состряпать класс MyEventArgs
      RaiseEvent TextChange(Me, MyArg)
      ...
    End Set
  End Property
End Class

и класс с аргументами (если нужно):
Public Class MyEventArgs
Public field1 As String = "превед"
Public field2 As Integer = 1
Public field3 As New Button()
Public field4 As Image = Nothing
Public field5 As DateTime = DateTime.Now
'и т.д. и т.п
End Class

далее:
Dim myObj As New List(Of MyObject)
for i as integer = 0 to 100
Dim o As New MyObject
o.Text = i.ToString()
AddHandler o.TextChange, AddressOf PathSaveChanged
myObj.Add(o)
next i

и далее:
Private Sub PathSaveChanged(ByVal sender As System.Object, ByVal e As MyEventArgs)
  'sender - объект
  'e - аругменты, например e.field1 , etc.
  MessageBox.Show(CType(sender, MyObject).Text)
  'на всякий случай лучше еще тип sender-а проверить, чтоб косяков не было
End Sub

Ответить

Номер ответа: 11
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #11
Добавлено: 16.04.08 16:55
сразу скажу что я новичек и плохо все, что вы здесь написали, знаю =)

для моего обработчика не важно какой тип у переменной, в большинстве случаев он просто проверяет пустое значение или нет...

Вообщем мне нужно вызвать обработчик при любом изменении указанных переменных и все.

Ответить

Номер ответа: 12
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #12
Добавлено: 17.04.08 04:24
Добавь топик в избранное, потом, как прийдет время, почитаешь, расскажешь нам о результатах :)

Ответить

Номер ответа: 13
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #13
Добавлено: 17.04.08 12:06
для таких случаев проще всего создать класс, который будет содержать нужные переменные в закрытой области, и объявить методы для доступа к этим данным - SetBlabla, GetBlabla. Еще можно почетать про паттерны, не помню как он называется, но суть - если кому то необходимо отслеживать изменения объекта, он передает классу метод, который будет вызываться при изменении переменной. кароч, ооп в помощь. вбдотнет как никак с ним в ладах.

Ответить

Номер ответа: 14
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #14 Добавлено: 17.04.08 16:11
Помоему, сет и гет для .НЕТа уже не существуют.. или я чего то путаю)

Ответить

Номер ответа: 15
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #15
Добавлено: 17.04.08 16:52
Помоему, сет и гет для .НЕТа уже не существуют.. или я чего то путаю)


а куда они делись? =))

Ответить

Страница: 1 | 2 |

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



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