ClassModulde Msforms.Control ile TextBox Enter Exit Olayları

Class Module İşlemleri

Cevap: Cevap: ClassModulde Msforms.Control ile TextBox Enter

İleti#21)  hsayar » 28 Şub 2010 22:42

Tarkan VURAL yazdı:Bu arada bir püf belirtmek istiyorum. AddressOf özelliği sadece Module içerisinde çalışır. O satırı gördüğünüzde, o prosedürü Module içine atmayı hatırlayınız. [evet]

Farkettim, ama soruyu sormuştum. En altta Declare Sub Görünce ayrı yerde olması gerektiğini anlamıştım. :)
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#22)  hsayar » 01 Mar 2010 13:53

Bugün sabahtan biraz vaktim oldu, İki Farklı frame içerisindeki textbox ve comboboxların exit enter olaylarınıo farklılaştırdım.

Önce kodlar
'Private myForm As Object 'UserForm değerinin pasif kılınma nedeni birden fazla userformda aynı clası kullanmak istememden dolayı module public olarak tanımladım.
Kod: Tümünü seç
Rem Kaynak Site http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=7285&page=0#7330
Rem Derleme        Hüseyin SAYAR       01.03.2010 - 13:30

Private Declare Function SetTimer Lib "user32" ( _
    ByVal Hwnd As Long, ByVal nIDEvent As Long _
    , ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Sub KillTimer Lib "user32" ( _
    ByVal Hwnd As Long, ByVal nIDEvent As Long)

Event EnterControl(ByVal Ctrl As MSForms.Control)
Event ExitControl(ByVal Ctrl As MSForms.Control)

'Private myForm As Object 'UserForm
Private myPreActiveControl As MSForms.Control
Private myTimerId As Long


Public Property Set Form(ByVal objForm As Object)
  Set myForm = objForm
End Property

Public Sub Init() '(ByVal myNewForm As UserForm)
    Set myPreActiveControl = GetActiveControl(myForm)
    RaiseEvent EnterControl(myPreActiveControl)
    myTimerId = SetTimer(0&, 0&, 0&, AddressOf TimerProc)
End Sub

Private Function GetActiveControl( _
    ByVal ParentObject As Object) As MSForms.Control
    Dim myContena As Object
    Dim myActiveControl As MSForms.Control
    On Error GoTo LstHdl
    If TypeName(ParentObject) = "MultiPage" Then
        Set myContena = ParentObject.SelectedItem
    Else
        Set myContena = ParentObject
    End If
    Set myActiveControl = myContena.ActiveControl
    Select Case TypeName(myActiveControl)
        Case "Frame", "MultiPage"
            Set myActiveControl _
                = GetActiveControl(myActiveControl)
    End Select
    Set GetActiveControl = myActiveControl
LstHdl:
    Set myContena = Nothing
    Set myActiveControl = Nothing
End Function

Public Sub CheckActiveControl()
    Dim myActiveControl As MSForms.Control
    On Error Resume Next
    Set myActiveControl = GetActiveControl(myForm)
    If myActiveControl Is Nothing Then Exit Sub
    If myActiveControl Is myPreActiveControl Then GoTo LstHdl
    RaiseEvent ExitControl(myPreActiveControl)
    RaiseEvent EnterControl(myActiveControl)
    Set myPreActiveControl = myActiveControl
LstHdl:
    Set myActiveControl = Nothing
End Sub

Private Sub Class_Terminate()
    KillTimer 0&, myTimerId
    Set myForm = Nothing
    Set myPreActiveControl = Nothing
End Sub





Userform Kodları, Önceki kodlarda CheckControl adı ile bulunan Private fonksiyon arguman eklenerek module taşındı.
Kod: Tümünü seç
Private WithEvents HsObj_TextveCombo As HsCls_TextveComboda_EnterExit

Private HsCol_EnterExit_Grp01 As Collection         'Girince içi sarı, çıkınca beyaz olacaklar
Private HsCol_EnterExit_Grp02 As Collection         'Girince içi kırmızı, çıkınca mavi olacaklar



Private Sub CommandButton5_Click()
  HsrFrm.Show
End Sub

Private Sub UserForm_Activate()
    Call HsSb_ExitControl_TextveCombo_Haz
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Call HsSb_ExitControl_TextveCombo_Sil
End Sub




Rem     USERFORMUNUZDA BULUNAN TÜM TEXTBOX VE COMBOXLARA
Rem yada istedeiğimiz framede bulunanlara
Rem ENTER ve EXİT OLAYLARI
Rem     KAZANDIRMAK İÇİN KULLANILACAK KOD ÖBEĞİ 1000 - 1004

Rem 1000
Public Property Get EventClass() As HsCls_TextveComboda_EnterExit
'HsCls_TextveComboda_EnterExit
    Set EventClass = HsObj_TextveCombo
End Property

Rem 1001
Private Sub HsObj_TextveCombo_EnterControl(ByVal Ctrl As MSForms.Control)
'HsCls_TextveComboda_EnterExit
    If HsFc_Col_KontroElemanimi(HsCol_EnterExit_Grp01, Ctrl) Then Ctrl.BackColor = vbYellow
    If HsFc_Col_KontroElemanimi(HsCol_EnterExit_Grp02, Ctrl) Then Ctrl.BackColor = vbRed
End Sub

Rem 1002
Private Sub HsObj_TextveCombo_ExitControl(ByVal Ctrl As MSForms.Control)
'HsCls_TextveComboda_EnterExit
    If HsFc_Col_KontroElemanimi(HsCol_EnterExit_Grp01, Ctrl) Then Ctrl.BackColor = vbWhite
    If HsFc_Col_KontroElemanimi(HsCol_EnterExit_Grp02, Ctrl) Then Ctrl.BackColor = vbBlue
End Sub

Rem 1003
Public Sub HsSb_ExitControl_TextveCombo_Haz()
Rem f değerlerini üstünde userform açmak için kapadım
Rem Hata alırsanız aktif ediniz.
Rem Ben Hata almadım.
'    Static f As Boolean
'    If f Then Exit Sub
    Set HsCol_EnterExit_Grp01 = New Collection
    Set HsCol_EnterExit_Grp02 = New Collection
       
        For Each ufCTRL In fraGOR.Controls
          If (TypeOf ufCTRL Is MSForms.TextBox) Then HsCol_EnterExit_Grp01.Add ufCTRL
          If (TypeOf ufCTRL Is MSForms.ComboBox) Then HsCol_EnterExit_Grp01.Add ufCTRL
        Next
       
        For Each ufCTRL In fraARA.Controls
          If (TypeOf ufCTRL Is MSForms.TextBox) Then HsCol_EnterExit_Grp02.Add ufCTRL
          If (TypeOf ufCTRL Is MSForms.ComboBox) Then HsCol_EnterExit_Grp02.Add ufCTRL
        Next

    Call HsSb_ExitControl_TextveCombo_Ver
'    f = True
End Sub
Public Sub HsSb_ExitControl_TextveCombo_Ver()
    Set HsObj_TextveCombo = New HsCls_TextveComboda_EnterExit
    With HsObj_TextveCombo
        Set .Form = Me
            .Init
    End With
End Sub
Rem 1004
Private Sub HsSb_ExitControl_TextveCombo_Sil()
    Set HsObj_TextveCombo = Nothing
    Set HsCol_EnterExit_Grp01 = Nothing
    Set HsCol_EnterExit_Grp02 = Nothing
End Sub




StandartModule
Ayrıca isnothing fonksiyonu eklendi alt formdan çıkıp ana forma geri döndüğümüzde exit/enter olayları kesintiye uğradığı için Alt form kapanırken Anaformdaki Clasaver prosodürünü çağırıyorum. Tabi hatala açıp kapatırken forem olmadığından kontrol de olmuyor onun için isnothing kullanıyorum. Bir formun üstüne başka form/formlar açtığımızda önceki açılanları unutmayacak yöntemi bulabilirsek çok daha güzel olur inancındayım.
Böyle bir problem yaşamamak için vbfun.de sitesinde bulunan textbox (Ben Text ve comboboxlar için bereberkullanılabilir hale getirdim) içinde sağ tuş menüsünü çalıştırmaya yarayan bulunan Texboxpopu clasının yanına Textboxpopucollection clası kullanmışlar. Bunu bu örneğimzde kullanabilir miyiz? Yada ne yapılabilir?

Kod: Tümünü seç

Private Declare Sub KillTimer Lib "user32" ( _
    ByVal Hwnd As Long, ByVal nIDEvent As Long)

Public myForm  As Object
Public Sub TimerProc(ByVal Hwnd As Long _
    , ByVal uMsg As Long, ByVal idEvent As Long _
    , ByVal dwTime As Long)
    On Error Resume Next
    If UserForms.Count = 0 Then
        KillTimer 0&, idEvent
        Exit Sub
    End If
   
Rem Bir Userformda class exit/enter olayını kullanacaksanız
Rem userformun adını alt satırda güncelleyiniz
    'UserForm1.EventClass.CheckActiveControl
   
Rem Birden Fazla Userformda class exit/enter olayını kullanacaksanız
Rem kullanacağanız Her userformun adını Case ile başlayan satırda güncelleyiniz.
    Select Case myForm.Name
      Case "UserForm1":    UserForm1.EventClass.CheckActiveControl
      Case "HsrFrm":       HsrFrm.EventClass.CheckActiveControl
      Case "formKIMLIKGIRIS":       formKIMLIKGIRIS.EventClass.CheckActiveControl
    End Select
End Sub
Public Function HsFc_Col_KontroElemanimi(ByVal Collection As Collection, _
                                         ByVal Ctrl As MSForms.Control) As Boolean

    If IsNothing(Ctrl) Then Exit Function
   
    Dim myCtrl As MSForms.Control
    For Each myCtrl In Collection 'myCollection
        If myCtrl Is Ctrl Then Exit For
    Next
    HsFc_Col_KontroElemanimi = Not myCtrl Is Nothing
    Set myCtrl = Nothing
End Function
Public Function IsNothing(Object As Object) As Boolean
On Error Resume Next
    Err.Clear
    Object.Properties(0) = Object.Properties(0)
    If Err.Number = 91 Then 'object variable or with block variable not set
        IsNothing = True
    Else
        IsNothing = False
    End If
End Function
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#23)  Tarkan VURAL » 01 Mar 2010 21:27

Detaylı inceleyemedim ama aklıma gelen bir yöntem, proje içindeki tüm UserForm nesnelerini açılış halinde iken Dizi, Collection içerine alıp sonradan load olup olmadıklarını denetleyerek yapmak. Nasıl yapılır bilmem ama fikir üretebilirim. [komik]
Resim
www.tarkanvural.com.tr

İnnâ lillâhi ve innâ ileyhi raciûn
Şüphesiz ki; biz Allah’a âidiz ve vakti geldiğinde O’na döndürüleceğiz.

HasbunAllâhu ve nimel vekîl
Bize Allah yeter. O ne güzel vekildir.


ExcelVBA.NET' e katkıda bulunmak ister misiniz ? O halde BAĞIŞ butonunu tıklayın...
Kullanıcı avatarı
Tarkan VURAL
Yönetim Kurulu
 
Adı Soyadı:Tarkan VURAL
Kayıt: 14 Haz 2008 18:27
Konum: @tarkanvural73
Meslek: LUU, Database Expert, Senior Software Specialist, Developer
Yaş: 46
İleti: 27044
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul - Beylikdüzü

Cevap: Cevap: ClassModulde Msforms.Control ile TextBox Enter

İleti#24)  hsayar » 01 Mar 2010 23:14

Tarkan VURAL yazdı:Detaylı inceleyemedim ama aklıma gelen bir yöntem, proje içindeki tüm UserForm nesnelerini açılış halinde iken Dizi, Collection içerine alıp sonradan load olup olmadıklarını denetleyerek yapmak. Nasıl yapılır bilmem ama fikir üretebilirim. [komik]

Bu durumda 1000-1001 nolu satırlar arasındaki problem karşımıza çıkacak. Çünkü timerproc prosodüründen class' ın olduğu Event prosedürüne gönderme yapıyor....
UserForm1.EventClass.CheckActiveControl, HsrFrm.EventClass.CheckActiveControl
Benim bildiğim
Dim Aktifform as Userform
Set Aktifform = UserForm1
Aktifform.EventClass.CheckActiveControl
... şeklinde bile yazamıyoruz, ama çözüm üretilebilirse çok güzel olacak.

Yalnız bunada şükür :) En olmadı Tek Userform içinde Frame ve Multipage nesnelerini sıkça kullanıp, userform yerine butondan hangi işlemi yapacaksak multipage.value değerini değiştireceğiz.
Kod: Tümünü seç
Public Sub TimerProc(ByVal Hwnd As Long _
    , ByVal uMsg As Long, ByVal idEvent As Long _
    , ByVal dwTime As Long)
    On Error Resume Next
    If UserForms.Count = 0 Then
        KillTimer 0&, idEvent
        Exit Sub
    End If
   
Rem Bir Userformda class exit/enter olayını kullanacaksanız
Rem userformun adını alt satırda güncelleyiniz
    'UserForm1.EventClass.CheckActiveControl
   
Rem Birden Fazla Userformda class exit/enter olayını kullanacaksanız
Rem kullanacağanız Her userformun adını Case ile başlayan satırda güncelleyiniz.
1000
    Select Case myForm.Name
      Case "UserForm1":    UserForm1.EventClass.CheckActiveControl
      Case "HsrFrm":       HsrFrm.EventClass.CheckActiveControl
      Case "formKIMLIKGIRIS":       formKIMLIKGIRIS.EventClass.CheckActiveControl
    End Select
1001
End Sub
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: Cevap: Cevap: ClassModulde Msforms.Control ile TextBo

İleti#25)  hsayar » 03 Mar 2010 14:35

hsayar yazdı:Yalnız bunada şükür :) En olmadı Tek Userform içinde Frame ve Multipage nesnelerini sıkça kullanıp, userform yerine butondan hangi işlemi yapacaksak multipage.value değerini değiştireceğiz.


Demiştim ya, herşeyi frameler içine alırsanız formun görünmeyen bir alanında tabindeksi 0 olan bir textbox bırtakın yoksa hata veriyor :)
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

Cevap: Cevap: ClassModulde Msforms.Control ile TextBox Enter

İleti#26)  hsayar » 09 Nis 2010 13:19

Tarkan VURAL yazdı:Detaylı inceleyemedim ama aklıma gelen bir yöntem, proje içindeki tüm UserForm nesnelerini açılış halinde iken Dizi, Collection içerine alıp sonradan load olup olmadıklarını denetleyerek yapmak. Nasıl yapılır bilmem ama fikir üretebilirim. [komik]


Merhabalar, Tarkan bey EnterExit Sınıf modulünün yanına EnterExcitCollection sınıf modulü yazıp ana-yavru ilişkisi kurma hususunda denemeleriniz oldu mu? Benim vaktim olmadığımdan foruma bile yeni giriyor sayılırım.
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#27)  Tarkan VURAL » 10 Nis 2010 16:00

Valla aynı durumdayım, hiç vaktim yok. Gerçi yokluğum belli olmuyor sağ olsun arkadaşlar çok iyi gidiyorlar. Umarım kısa zamanda sistemimi kurar ve yine foruma yeterli vakti ayırabilir duruma gelirim.
Resim
www.tarkanvural.com.tr

İnnâ lillâhi ve innâ ileyhi raciûn
Şüphesiz ki; biz Allah’a âidiz ve vakti geldiğinde O’na döndürüleceğiz.

HasbunAllâhu ve nimel vekîl
Bize Allah yeter. O ne güzel vekildir.


ExcelVBA.NET' e katkıda bulunmak ister misiniz ? O halde BAĞIŞ butonunu tıklayın...
Kullanıcı avatarı
Tarkan VURAL
Yönetim Kurulu
 
Adı Soyadı:Tarkan VURAL
Kayıt: 14 Haz 2008 18:27
Konum: @tarkanvural73
Meslek: LUU, Database Expert, Senior Software Specialist, Developer
Yaş: 46
İleti: 27044
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul - Beylikdüzü

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#28)  hsayar » 12 Nis 2010 16:56

Benim bugünlerde iş yüküm azalmakla beraber yaptığım çeşitli denemelerde hüsrana uğramam nedeni ile bir süre TxCmb_Exit/TxCmb_Enter Class'ının Koleskiyona alınması ile ilgilenmeme kararı aldım. Umarım boş bir anınızda yardımcı olabilirsiniz.
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#29)  hsayar » 26 Oca 2011 09:42

Sn. Vural; vbFun.de dan alıp düzenlediği textbox ve comboboxlarda sağ tuş örenğindeki gibi enter-exit clası içinde Koleksiyon calsı yazıp ikisini birleştirebilmemiz mümkün mü?
ben beceremedim.
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#30)  Haldun Alay » 26 Oca 2011 10:24

Aşağıdaki konu başlığında Class Modüle oluşturma ve form üzerindeki kontrolleri bu class modüle uyarlama örneği mevcut.

TextBox verisini otomatik olarak sayfaya aktarma
Kullanıcı avatarı
Haldun Alay
Site Dostu
 
Adı Soyadı:Haldun Alay
Kayıt: 15 Haz 2008 00:14
Konum: Rakım 0
Meslek: Turizm
Yaş: 49
İleti: 1241
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aydın/Kuşadası

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#31)  hsayar » 26 Oca 2011 10:53

Haldun bey, collection clasına yazılan nesneler (textbox, combobox) üzerine clsEnterExit Clası ile işlem yapmak istiyorum ve ben uyarlayamadım.

Aşağıdaki örnekte textbox ve comboboxlar koleksiyona alınıyor, istenen userformun initalize olayında önce koleksiyon sınıfına yazılıyor. Aktif kontrol yordamı ile istenen nesne ise işlem sınıfı (popup) çağrılıyor. Bende enter, exit olayı için aynısını yapmak istiyorum ama elimde örnek olmasına rağmen beceremiyorum.
Nihai amacaım enter, exit ve popup olaylarını 2 ya da 3 sınıf modulü (Koleksiyonlar, Olaylar yada koleksiyonlar, popup, enterexit) ile birleştirmek.
Felaket Başa Gelmeden Evvel Önleyici ve Koruyucu Tedbirler Düşünmek Lazım.

Felaket Geldikten Sonra Dövünmenin Yararı Yoktur.

Mustafa Kemal ATATÜRK
Kullanıcı avatarı
hsayar
Site Dostu
 
Adı Soyadı:Hüseyin SAYAR
Kayıt: 18 Eyl 2008 09:30
Meslek: Çalışma Ekonomisti
Yaş: 40
İleti: 600
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Edirne/İpsala

Cevap: ClassModulde Msforms.Control ile TextBox Enter Exit O

İleti#32)  me68met » 04 Haz 2012 22:55

Emeği geçen, anlatan, yapan, paylaşan herkese teşekkür ederim. şkşk
Kullanıcı avatarı
me68met
 
Adı Soyadı:Mehmet Birlikdoğan
Kayıt: 06 Kas 2009 16:53
İleti: 1
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Kars

Önceki

Forum Class Module

Online Kullanıcılar

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 1 misafir

cron
Bumerang - Yazarkafe