1

Konu: Gridde değişiklik

Gridde rakamlar tutuyorum ve boş olan hücrelere yeni rakamların girilebilmesini ama var olan bir hücredeki rakam değiştirilirse messagebox ile ikaz verilmesini istiyorum bunu nasıl yapabilirim acaba. Emin misiniz diye sorup Evet tıklanırsa değişikliğin geçerli olmasını, Hayır denirse eski rakamın kalmasını sağlamam lazım.
Teşekkürler.

2

Re: Gridde değişiklik

sanırım isine yarar

Visual Fox Pro
*!* Grid Cell textBox GotFocus

this.tag = trans(this.value)
 
 
*!* Grid Cell textBox LostFocus
if this.value # val(this.tag)
    if messagebox("Değer değişti... değişiklik uygulansınmı?",36,"Uyarı")=6
                  this.value=this.value
        else
        this.value = val(this.tag)
    endif
endif

3

Re: Gridde değişiklik

Teşekkürler Soykan Hocam ama Grid jenerik bir grid ve tüm alanlar seçenekler sonucu oluşuyor. Tüm alanlarda da sayısal data var. Bu alanların herhangi birinde değişiklik yapıldığını yakalayabilmek, eski ve yeni değeri bilerek kullanıcının onayına sunmak, onun tercihine göre eski değeri veya yeni değeri griddeki hücrede geçerli yapmak istiyorum.

4

Re: Gridde değişiklik

ozaman jenerik grid textbox class tan olussun ve bu kodlara sahip olsun ozaman olusan tum grid textbox lar bu davranisa sahip olur

5

Re: Gridde değişiklik

soykanozcelik yazdı:

ozaman jenerik grid textbox class tan olussun

Bunu nasıl yapacağım hocam, biraz açabilir misiniz.

6

Re: Gridde değişiklik

Visual Fox Pro
*!* Grid Init te olusan tum kolonlara yeni class atamasi yapmis olursun

With This
    For Each oColumn In .Columns
        With oColumn
            .RemoveObject('Text1')
            .Newobject('GrdTextBox ','GrdTextBox')
            .CurrentControl='GrdTextBox '
            .GrdTextBox .Visible=.T.
        Endwith
    Endfor
Endwith
 
 
*!* buda generic gridte kullanabilecegin textbox class
Define Class GrdTextBox As TextBox
 
    BorderStyle = 0
    Height = 23
    Margin = 0
    Width = 100
    Name = "GrdTextBox"
 
    Procedure GotFocus
        With This
            .Tag = Transform(.Value)
        Endif
    Endwith
Endproc
 
    Procedure LostFocus
        With This
            If .Value # Val(.Tag)
                If Messagebox("Değer değişti... değişiklik uygulansınmı?",36,"Uyarı")=6
                    .Value=.Value
                Else
                    .Value = Val(.Tag)
                Endif
            Endif
        Endwith
    Endproc
 
Enddefine

7

Re: Gridde değişiklik

kontrol etmeden yazıyorum:
Myform.mygrid.Init

Visual Fox Pro
FOR m.xi=1 TO Myform.mygrid.ColumnCount

  BINDEVENT(Myform.mygrid.Columns[Xi].Text1,"LostFocus",ThisForm,"LostFocusEvent")
  BINDEVENT(Myform.mygrid.Columns[Xi].Text1,"GetFocus",ThisForm,"GetFocusEvent")
ENDFOR


MyForm.GetFocusEvent ve MyForm.LostFocusEvent içeriği Soykan'ınkı gibi, olacak.

Ben LostFocus yerine Valid Eventi kullanıyorum, ustalar beğenmiyor

Visual Fox Pro
With This

            If .Value # Val(.Tag)
                If Messagebox("Değer değişti... değişiklik uygulansınmı?",36,"Uyarı")=6
                    .Value=.Value
                    RETURN 1   && sonraki kontrole git
                Else
                    .Value = Val(.Tag)
                    RETURN 0   && kontrolde kal
                 Endif
            Endif
Endwith
VFP9 SP2

8

Re: Gridde değişiklik

Ali Abi ne diyeceğimi bilemiyorum, çok güzel ufuk açtın.
Bu şekilde daha hızlı ve kolay halledebilirim diye düşünüyorum.
Soykan Abiye de Sana da sonsuz teşekkürler.

9

Re: Gridde değişiklik

Ali Abi,
Gridin her kolonunda texte girerken ve çıkarken gayet güzel Formda oluşturduğumuz "MyForm.GetFocusEvent"  ve "MyForm.LostFocusEvent" çağrılıyor. Ama bu 2 event içinde This.Value dediğimde hata alıyorum.
This ifadesini Form'da oluşturduğumuz Event (MyForm.GetFocusEvent) olarak gördüğü için Value alamıyorum.
Bu eventi çağıran text'in value değerini buraya parametre olarak gönderme şansımız var mı acaba ?

10

Re: Gridde değişiklik

ozcan yazdı:

Ali Abi,
Gridin her kolonunda texte girerken ve çıkarken gayet güzel Formda oluşturduğumuz "MyForm.GetFocusEvent"  ve "MyForm.LostFocusEvent" çağrılıyor. Ama bu 2 event içinde This.Value dediğimde hata alıyorum.
This ifadesini Form'da oluşturduğumuz Event (MyForm.GetFocusEvent) olarak gördüğü için Value alamıyorum.
Bu eventi çağıran text'in value değerini buraya parametre olarak gönderme şansımız var mı acaba ?

Hata alırsın cunku TextBox Class a gore ayarli kisisel onerim TextBox Class kullanman

11 Son düzenleyen, ozcan (15.12.2011 09:35:47)

Re: Gridde değişiklik

Soykan Hocam, Grid içindeki texboxların değişimini Grid Init içinde veya herhangi bir method içinde yapıyorum ama yazdığın koddaki 2. bölüm olan Class tanımlamasını Formun veya Grid'in hiç bir methodunda methodlarda class tanımı yaptırmadığı için yapamıyorum. Class tanımı için form dışında .prg mi kullanmalıyım, bu tanımlama en uygun nerede yapılabilir.

Ana .PRG içinde bir procedure açıp içine yazdım ve oldu ama başka bir pratik yolu da var mı diye sormak istedim.

12

Re: Gridde değişiklik

ozcan yazdı:

Ali Abi,
Gridin her kolonunda texte girerken ve çıkarken gayet güzel Formda oluşturduğumuz "MyForm.GetFocusEvent"  ve "MyForm.LostFocusEvent" çağrılıyor. Ama bu 2 event içinde This.Value dediğimde hata alıyorum.
This ifadesini Form'da oluşturduğumuz Event (MyForm.GetFocusEvent) olarak gördüğü için Value alamıyorum.
Bu eventi çağıran text'in value değerini buraya parametre olarak gönderme şansımız var mı acaba ?


iyi soru, çözüm tekniğini pek vaktim olmadığından kontrolsüz yazıyorum, olunca haber ver lütfen.
Eventlerin içine tıklanan değeri bulmak için aşağıdakini ekle

Visual Fox Pro
Amouseobj(arMo,1)

m.xreferance="MyForm.Mygrid."+armo[1].name+".Text1.Value"
m.ArananText1Value=EVALUATE(m.xreferance)

Bir de eski bir tartışma hatırlıyorum: (Çetin'den) bu tür işlemlerde Text1.Value sağlıksız olur, gridin bağlı olduğu Recordsource de ilgili değeri kullanmak daha iyi diye:  O zaman değeri de şöyle bulabileceğini düşünüyorum.
örneğin BeforeRowColChange den nColIndex i Myform.KolonSira değerine alabilirsin
m.ArananText1Value= EVALUATE(FIELD (myform.mygrid.RecordSource),Myform.KolonSira )
EVAL() çalışmazsa &' dene çalışır

VFP9 SP2

13

Re: Gridde değişiklik

Amouse, mouse pointere bağlı değer vereceği için bu projede net sonuç vermeyecektir ama Çetin Hoca'nın da tavsiyesi olan 2. önerin mantıklı.
Şu anda Soykan Hoca'nın önerdiği şekilde yaptım ve oldu. Şimdilik Class tanımlamasını Ana PRG içinde bir Procedure içinde yaptım, sağlıklı çalışıyor.
Hepinize çok teşekkürler.

14

Re: Gridde değişiklik

yukarakini unut, amouseobj mouse ile ilgili, diğer teknik olur:

Visual Fox Pro
m.ArananText1Value=This.Parent.parent.RecordSource+"."+(FIEL(ThisForm.xkolon,This.Parent.parent.RecordSource))

WAIT STR(EVALUATE(m.ArananText1Value))
VFP9 SP2

15

Re: Gridde değişiklik

ozcan yazdı:

Soykan Hocam, Grid içindeki texboxların değişimini Grid Init içinde veya herhangi bir method içinde yapıyorum ama yazdığın koddaki 2. bölüm olan Class tanımlamasını Formun veya Grid'in hiç bir methodunda methodlarda class tanımı yaptırmadığı için yapamıyorum. Class tanımı için form dışında .prg mi kullanmalıyım, bu tanımlama en uygun nerede yapılabilir.

Ana .PRG içinde bir procedure açıp içine yazdım ve oldu ama başka bir pratik yolu da var mı diye sormak istedim.

daha sonraki thread te ana.prg icinde procedure olarak cozdugunu yazmissin evet oylede olur
yeni GrdTextBox isminde bir textbox class yaratarak ta olur ozaman

Visual Fox Pro
.Newobject('GrdTextBox ','GrdTextBox')

olan kod

Visual Fox Pro
.Newobject('GrdTextBox ','GrdTextBox.Vcx')

olarak degistirirsin