1

Konu: ActiveCell'in sütun numarası

Merhaba,
Grid'de ActiveCell'in sütün numarasını nasıl öğrenebilirim?

Not: ActiveColumn, sütun sıra numarasını veriyor. Benim istediğim gerçek sütun numarası.

/o---------------------o\
     www.haser.com
\o---------------------o/

2

Re: ActiveCell'in sütun numarası

sys(1272,oobjectname)  işine yarar mı?

3

Re: ActiveCell'in sütun numarası

ActiveColumn

4

Re: ActiveCell'in sütun numarası

ercan yazdı:

sys(1272,oobjectname)  işine yarar mı?


İşime yaramıyor çünkü; bunu kullanabilmem için ThisForm.ActiveControl'u kullanmak gerekiyor ki bu da sadece gridin adresini veriyor.

cetinbasoz yazdı:

ActiveColumn


ActiveColumn, sütun sıra numarasını veriyor. Benim istediğim gerçek sütun numarası.

/o---------------------o\
     www.haser.com
\o---------------------o/

5 Son düzenleyen, foxman (04.10.2007 16:36:31)

Re: ActiveCell'in sütun numarası

Aşağıdaki kod bir command button un içinde çalışıyor, setfocus yapmazsan activecolumn değerini alamıyorsun. Denemedim ama belki bir obje içinden activecolumn değeri alınabiliyordur.

Eğer gridi dizayn ettikten sonra kolonları kaydırmışsan gerçek kolon numarasını almak için aşağıdaki kod işe yarayabilir.


Visual Fox Pro
thisform.grid1.SetFocus 

 
colnumber      =thisform.grid1.ActiveColumn
colname        =thisform.grid1.columns(colnumber).name
realcolnumber=thisform.grid1.&colname..ColumnOrder
 
*?colnumber,colname,realcolnumber
 
thisform.command1.SetFocus

6

Re: ActiveCell'in sütun numarası

Aradigin bu mu acaba:

Visual Fox Pro
* gridClass::findcolumn

lparameters nColIndex
local ix
with this
    for ix = 1 to .columncount
        if .columns(m.ix).ColumnOrder = m.nColIndex
            return m.ix
        endif
    endfor
endwith

7

Re: ActiveCell'in sütun numarası

Herkese teşekkürler
Çetin'in yaptığı gibi yapmıştım ama belki bilmediğin bir activecontrol vardır diye düşünmüştüm.

Not: Bence Grid foxpronun en güçlü nesnesi. Bu güçlü nesnede active kontrolün adına belki hızlı bir şekilde erişebilirim diye düşünmüştüm.

/o---------------------o\
     www.haser.com
\o---------------------o/

8

Re: ActiveCell'in sütun numarası

Evet browse en gucluydu, grid yerini aldı:)

Tarkan,
Acaba demek istedigin varread() mi diye dusunmeye basladım. Hic dolasmadan field adini almak icin?

9

Re: ActiveCell'in sütun numarası

Hayır field'in adı değil de sütun numarası lazım. Aslında sütun da değil ilgili sütundaki currentcontrol lazım.

/o---------------------o\
     www.haser.com
\o---------------------o/

10

Re: ActiveCell'in sütun numarası

Yavas yavas FoxyClasses'in kodlarini yaziyorum:)
Yukaridaki gridin findcolumn() metodu idi.

Visual Fox Pro
* BeforeRCC, AfterRcc

lparameters nColIndex
with this
*...
    oColumn = .columns(.FindColumn(nColIndex))
*...
        oCurrentControl = evaluate("oColumn."+;
            iif( !empty(oColumn.dynamiccurrentcontrol), ;
            eval(oColumn.dynamiccurrentcontrol),;
            oColumn.currentcontrol) )
*...

11 Son düzenleyen, taRKan (09.10.2007 12:21:39)

Re: ActiveCell'in sütun numarası

FindColumn yazısını görünce FoxyClasses'dan olduğunu anlamıştım zaten smile
Çetin aslında olay tam olarak şu.
Seninle daha önceden de konuşmuştuk hatırlarsan.
Örneğin formunda 3 textbox 1 grid 2 command olsun. Command'lerden biri kaydet düğmesi olsun. grid'in içine ise kullanıcı bilgileri giriyor. textboxlarından birinde tarih sorulsun.

Formun KeyPress'i .T. olsun ve F2 tuşuna basıldığında kaydet düğmesine çalışıyor.
1. Durum
Kullanıcı F2 tuşuna basıldığında formun KeyPress'inde şunu yapıyorum.

Visual Fox Pro
With ThisForm

    Do Case
        Case nKeyCode = -1 && F2
            NoDefault
            If .cmdKaydet.Enabled
                .cmdKaydet.SetFocus
                .cmdKaydet.Click
            EndIf
...

2. Durum
Tarihi girişi yapılan textbox'a kullanıcı hatalı bir tarih girişi yapsın ve textbox'ın içinden çıkmadan F2 düğmesine bassın. Bu durumda TextBox'un çıkışında VFP hata mesajı verse de kaydet methodu çalışıyor ve hatalı sonuçlar oluyor bunu engellemek için şunu yazdım.

Visual Fox Pro
If     InList(nKeyCode, -1, -4, -5, -6, -7) And ;

    Type("ThisForm.ActiveControl.Value") = "D" And ;
    Empty(ThisForm.ActiveControl.Value) And ;
    !Empty(StrTran(ThisForm.ActiveControl.Text, Set("Mark"), ""))
 
    MessageBox(TARIH_HATALI, 48, UYARI)
    Return .F.
EndIf
With ThisForm
    Do Case
        Case nKeyCode = -1 && F2
            NoDefault
            If .cntUst.cmdKaydet.Enabled
                .cntUst.cmdKaydet.SetFocus
                .cntUst.cmdKaydet.Click
            EndIf
...


3. Durum
Ancak kullanıcı grid içindeki bir sahaya hatalı tarih yazdığında yukarıdaki kontrol yeterli olmuyor.
ThisForm.ActiveControl.Text kısmında hata oluyor çünkü activecontro'ün text yok. Bu durumda grid'in ilgili sütunun ilgili controlünün text'i bilmem gerekiyor. İşte bu yüzden sordum bu soruyu. If kontrolüne direk yazabilir miyim diye. Ancak anladım ki olmuyormuş smile

/o---------------------o\
     www.haser.com
\o---------------------o/

12

Re: ActiveCell'in sütun numarası

Çetin,
Formun keypress olayını çözdüm ancak enteresan bir şey var.
Grid'de tarih sahasına geçersiz bir bir tarih yazıyorum Enter ya da Tab yapmadan fare ile bir düğmeye basıyorum ve o düğmenin Click metodu çalışıyor. Bu da işlemine göre hatalı sonuçlar doğurabiliyor.

Wait Window'da "invalid date" hatası vermesine karşın clik çalışıyor.

/o---------------------o\
     www.haser.com
\o---------------------o/

13

Re: ActiveCell'in sütun numarası

Calisir, gridin duzeltilmeyen bugi:)
Tarkan,
Olayi daha basit yapsana. Clickte tarih gecerlimi diye bak - gridsource.tarih.

14

Re: ActiveCell'in sütun numarası

Bu olay tek bir form olsa dediğin kolay. O kadar farklı formlar var ki hangi bir click'e hangi kontrolleri yazayım sad

Artık uğraşacağız bir şekilde smile

İlgin için teşekkürler

/o---------------------o\
     www.haser.com
\o---------------------o/

15 Son düzenleyen, ercan (09.10.2007 23:32:35)

Re: ActiveCell'in sütun numarası

değişkeni  ctod() fonsiyonuyla tarih tipine değiştirdikten sonra textbox da yanlış ya  da geçersiz tarih girildiğinde ingilizce olarak uyarı mesajı verip textbox tan çıkmıyor.Ta ki geçerli bir tarih girilene dek.

boş bir formda boş bir textbox için

init
-------
this.value=CTOD(this.value)



dateformat=3-british
datemark="/"
inputmask="99/99/9999"
olarak denediğimde  ve geçersiz tarih girildiğinde ingilizce olarak "invalid date" mesajı çıkıyor.

16

Re: ActiveCell'in sütun numarası

Ercan,
Sorun grid'de herhangi bir tarih sahasına geçersiz tarih yazıp fare ile bir düğmeye bastığında o düğmenin click event'inin çalışması. Foxpro geçersiz tarih uyarı vermesine karşın düğmenin click event'ini çalıştırıyor. Oysa ki çalışmaması lazım.

/o---------------------o\
     www.haser.com
\o---------------------o/

17

Re: ActiveCell'in sütun numarası

Tarkan şöyle bir yol olabilir mi acaba?
cursor , gridin tarih alanına girdiğinde gotfocus methodunda tüm command buttonlar ın enabled propertyilerine .f. atarsın.   lostfocus eventte ise tüm command buttonlar ın enabled propertyilerine .t. atarsın.   aklıma gelen tek çözüm bu maalesef.

18 Son düzenleyen, taRKan (13.10.2007 07:44:36)

Re: ActiveCell'in sütun numarası

Bence ActiveControl'ü kontrol etmek daha pratik

/o---------------------o\
     www.haser.com
\o---------------------o/