1

Konu: combo interactivechange

bir formda 1 combo ve gridim var

combodan bir değer seçiyorum (örneğin SENE değerini)  ve gride ekliyorum
aşağıdaki kodlar sorunsuz çalışıyor
formu kapatmadan aynı combodan tekrar aynı değeri(SENE) seçtiğimde interactivedeki kodlar çalışmıyor, bunu nasıl çözebilirim

combo init

Visual Fox Pro
CREATE CURSOR bkbirim ( birim c(10))

INSERT INTO  bkbirim VALUES ("Adet")
INSERT INTO  bkbirim VALUES ("Gün")
INSERT INTO  bkbirim VALUES ("Hafta")
INSERT INTO  bkbirim VALUES ("ay")
INSERT INTO  bkbirim VALUES ("SENE")
WITH this
.RowSourceType=3
.RowSource = "select birim from bkbirim into cursor cbobkbir"
.ColumnCount =1
.ListIndex=0
.ColumnWidths="30"
.Style= 2
.ListItemId=0
ENDWITH

combo interactivechange

Visual Fox Pro
WITH thisform

.combo1.visible = .f.
.text1.value = cbobkbir.birim
.text1.visible = .t.
.text2.visible = .t.
.txtnumber1.visible = .t.
.label1.visible = .t.
.label2.visible = .t.
ENDWITH
Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

2 Son düzenleyen, ugurlu2001 (20.10.2010 13:38:57)

Re: combo interactivechange

Tarık;

Tetiklediğin method un adı üstünde smile : Interativechange -> Yani yapılan / seçilen işlemde bir değişiklik var mı diye bakıyor?

Kodunu MouseDown() metodu içerisinde deneyebilirsin yada MouseClick() yada MouseUp. Bu kısımlarda Interactive değerini kontrol et. Eğer değişme varsa InteractiveChange metodunu çalıştırıp Return ile dönüş yap. Yoksa aynı değeri tekrar ekleyebilirsin

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: combo interactivechange

Calismiyor derken? Garip bir interactivechange kodu olmus (yani oyle bir combodan secim yapmak cok zor):


Visual Fox Pro
PUBLIC oForm

oForm = CREATEOBJECT('myForm')
oForm.Show()
 
Define Class myform As Form
  Height=350
  Width=400
  Add Object text1 As TextBox With Top =30
  Add Object text2 As TextBox With Top =60
  Add Object txtnumber1 As TextBox With Top =90
  Add Object label1 As Label With Top=120
  Add Object label2 As Label With Top=150
  Add Object Combo1 As ComboBox WITH top=180
  Add Object cmdShowCombo As CommandButton With Top=210,Caption='Combo'
 
  Add Object grd As Grid With Left=150,Height=350,Width=250,RecordSource='test'
 
  Procedure Load
    Create Cursor test (f1 i, f2 c(10))
  Endproc
 
  Procedure Combo1.Init
    Create Cursor bkbirim ( birim c(10))
    Insert Into  bkbirim Values ("Adet")
    Insert Into  bkbirim Values ("Gün")
    Insert Into  bkbirim Values ("Hafta")
    Insert Into  bkbirim Values ("ay")
    Insert Into  bkbirim Values ("SENE")
    With This
      .RowSourceType=3
      .RowSource = "select birim from bkbirim into cursor cbobkbir"
      .ColumnCount =1
      .ListIndex=0
      .ColumnWidths="30"
      .Style= 2
      .ListItemId=0
    Endwith
  Endproc
 
  Procedure Combo1.InteractiveChange
    With Thisform
      .Combo1.Visible = .F.
      .text1.Value = cbobkbir.birim
      .text1.Visible = .T.
      .text2.Visible = .T.
      .txtnumber1.Visible = .T.
      .label1.Visible = .T.
      .label2.Visible = .T.
    Endwith
  ENDPROC
 
  PROCEDURE Combo1.LostFocus
  INSERT INTO test (f2) VALUES (cbobkbir.birim)
  ENDPROC
 
  PROCEDURE cmdShowCombo.Click
  thisform.combo1.Visible = .t.
  endproc
Enddefine

4

Re: combo interactivechange

smile demekki interactivechange den beklentilerim fazlaymış deminden beri kendime gülüyorum , interactivecahnge altında buzağı aramakmış benimki
click ile çözdüm
uğur ilgin için teşekkür ederim bu arada mailini okudum ,şu aşağıdaki satırlar çok hoşuma gitti

O amca mahalleden geçerken biz 5 kardeş
ayağa kalkardık,çünkü bize bahşiş verirdi.Babam eve gelince ayağa
kalkmazdık.Çünkü hediye,para falan hak getire.




ugurlu2001 yazdı:

Tarık;

Tetiklediğin method un adı üstünde smile : Interativechange -> Yani yapılan / seçilen işlemde bir değişiklik var mı diye bakıyor?

Kodunu MouseDown() metodu içerisinde deneyebilirsin yada MouseClick() yada MouseUp. Bu kısımlarda Interactive değerini kontrol et. Eğer değişme varsa InteractiveChange metodunu çalıştırıp Return ile dönüş yap. Yoksa aynı değeri tekrar ekleyebilirsin

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

5

Re: combo interactivechange

çetin hocam  sizin mesajı sonradan gördüm ve denedim sizin yazdığınızda sorunu çözüyor, ilginiz için teşekkür ederim

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

6

Re: combo interactivechange

Comboboxta 2 tane kolonum var.
ikinci kolonun değerini bir değişkene nasıl atayabilirim

7

Re: combo interactivechange

Formun init inde Bir property ekle, Eklediğin Property artık formun her yerinden ulaşılabilir bir değişken gibi işlem görür.  Grid de ki column un controlsource kısmına bu property yi gösterebilirsin.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

8

Re: combo interactivechange

Combodan dogrudan deger alma hic. Gerek de yok. RowsourceType'i SQL ise yukaridaki gibi, dogrudan o cursordan degeri al:

cbobkbir.birim

gibi. Asagida bir ornek var:


Visual Fox Pro
Public oForm

oForm = Createobject('comboSample')
oForm.Show
 
Define Class comboSample As Form
  DataSession = 2
  Add Object t1 As TextBox With top=10,Left=10,ControlSource='customer.cust_id'
  Add Object t2 As TextBox With top=40,Left=10,ControlSource='customer.Company'
  Add Object t3 As TextBox With top=70,Left=10,ControlSource='customer.Contact'
 
  Add Object cmbSample As ComboBox With ;
    top=100,Left=10,Width=200,;
    Style = 2, ;
    RowSourceType=3,;
    RowSource='select Company, cust_id'+;
    ' from (_samples+"data\customer")'+;
    ' into cursor crsCustomers'
 
  Procedure Load
    Set Multilocks On
    Use (_samples+'data\Customer')
    CursorSetProp("Buffering",5,'Customer') && don't want to really save during testing
  Endproc
 
  Procedure cmbSample.InteractiveChange
    =Seek(crsCustomers.Cust_id,'customer','cust_id')
    This.Parent.Refresh()
  Endproc
Enddefine

9

Re: combo interactivechange

smentes yazdı:

Comboboxta 2 tane kolonum var.
ikinci kolonun değerini bir değişkene nasıl atayabilirim


m.lcDeğişken=Myform.MyCombo.List(Myform.MyCombo.ListIndex,2)

VFP9 SP2

10

Re: combo interactivechange

Ali,
Merhaba. Ozellikle .List() ya da .Value kullanmayin demek istemistim:) Llistbox'tan alirsan degerler (ozel bir durum disinda) daima karakter. Oysa aslinda baska tipler de olabilir. Dogrudan kaynaktan almak daha iyi. Hem kaynaktan alirsan combodaki kolon sayisinin da onemi yok. Orada tek kolon bile olsa secilen kaydin tum fieldleri kaynak uzerinden erisilebilir durumda.

11

Re: combo interactivechange

Teşekkür ederim. Ali beyin örneği benim için yeterli.

12

Re: combo interactivechange

özür dilerim - başlığı başka yerde sürdürülmesine neden olmuşum, aşağıda devamı:

konuka yazdı:

Çetin inanmayacaksın: senin yazını okudum - o an elimin altında olan kodun zayıflığı da o imiş.
araya sonradan eklediğim bir alan, List(..,3) diye çağırıldığında 4 olmuş - ve bütün program yapısında yanlışlık veriyordu !

Ancak inadına ( gibi olacak ama değil :] )
ilk açılışta olmayan bir değer ile (örneğin müşteriId=0) sorgulama yapıp ürettiği cursoru BOŞ getirip (gridleri listleri boş tutmak istediğimde) olmuyor
illa ki kendi cursorunun ilk değerini (örneğin curmüşteri.müşteriId=5) alıp sorguyu o değerle yapıyor - kendi displayvaluesu da boş olup garip görüntü oluşuyor .

Başka bir deyişle myCombo.ListIndex=0 veya myCombo.Value="" koşullarını cursorMycombo ile sağlayamıyorum.

Not: biraz akademik oldu - aslında uzun vadeliprogramlarda (ne demekse) senin önerini kullanmak daha iyi olacak, başka kodlar üreterek !


cetinbasoz yazdı:

smile Onun nedeni kullanilan rowsource'da nofilter olmamasi. Nofilter + ekstra guvenlik olarak Listindex = 0 kontrolu:

Visual Fox Pro
if .ListIndex = 0

  deger = 0 && ya da "", {} gibi
else
  myCursor.alanAdi
endif
VFP9 SP2