Onay kutusu ile değer alma

21/11/2008, 01:06

onur_can

Arkadaşlar kolay gelsin ekte hazırlamış olduğum dosyada 1 metin kutusu 4 adet onay kutusu var ilk başta form açıldığında onay kutuları boş sorum Şu: 1.onay kutusunu işaretlediğimde metin kutusuna onay kutusunun etiketini yazması burda sorun yok ikinci onay kutusunu işaretlediğimde metin kutusuna hem 1. hemde 2.onay kutusunun etiketini yazacak. (1. ve 2.işaretli) Özetle şöyle diyebilirim hangi onay kutuları seçili ise metin kutusuna yan yana bu onay kutularının etiketlerini yan yana aralarında virgül olacak şekilde yazacak, hangisinide iptal edersem onu silecek.
yardımlarınız için teşekkürler...
kolay gelsin.
21/11/2008, 01:51

C*e*l*o*y*c*e

arkadaşım eklemeyi yaptım ama çıkarmayı yapamadım,bundan gidebilirsin,ayrıca diğer hocalar mutlaka cevap vereciktir, kolay gelsin
21/11/2008, 09:30

mehmetdemiral

Bence kodları şöyle değiştirin

Private Sub Onay0_Click()
If Onay0 Then
Metin2 = "Ali" & ","
Else
Me.Onay0.Requery
End If
End Sub

Private Sub Onay1_Click()
If Onay1 Then
Metin2 = (Metin2) & "Ahmet" & ","
Else
Me.Onay0.Requery
End If
End Sub

Private Sub Onay2_Click()
If Onay2 Then
Metin2 = (Metin2) & "Bahri" & ","
Else
Me.Onay1.Requery
End If
End Sub

Private Sub Onay3_Click()
If Onay3 Then
Metin2 = (Metin2) & "Mesut" & ","
Else
Me.Onay2.Requery
End If
End Sub


Böylece ilk olarak onay0 basılmazsa

,Ahmet

şeklinde yazılmasını önlersiniz. Virgül her zaman sona atılabilir. Ama başta olması çirkin olur

Bu arada çıkarma işlemi sanıldığı kadar basit değil. Mid komutuyla metin2 içindeki istenen değerin bulunması gerekiyor. Onayı kaldırılmak istenen değer ile metin2 içindeki değer karşılaştırılarak yakalnması gerekiyor. Şu andaüzerinde çalışıyorum. Halledebilirsim yollayacağım.
21/11/2008, 14:12

onur_can

Arkadaşım Çook Teşekkürler, Ellerine sağlık,
Bu bilgiden yola çıkarak kalan kısmı tamamlamaya çalışacağım.
İyi Çalışmalar dilerim...
21/11/2008, 21:01

mehmetdemiral

Yalnız dediğim gibi.. Görüldüğü kadar kadar olmayacak. Önce isterseniz kodları tek tek açıklayarak mantığını kuralım. Belki bizim ustalar da yardım ederler bize..

If Onay0 Then
'(eğer onay0 basıldıysa)

Metin2 = (Metin2) & "Ali" & ","
'(metin2'ye içeriğiyle bilikte "Ali," ekle)

Else
'(değilse)

For i = 1 To Len(Metin2)
'(metin2 değerini belirlenen yere kadar okumaya başla)

If Mid(Me.Metin2, i, Len("ali")) = "ali" Then
'(eğer metin2'nin içinde "ali" değeri bulunursa)

s = i
'(s değişkenini ali'nin bulunduğu sıraya (yani i'ye) ata)

End If
'(if işlemi bitsin)

Next
'(işleme dön)

MsgBox "burası başlangıç " & s
'(aranan değerin başlama sırası ekrana yazıldı)

m = Len("ali")
'("ali" isminin karakter sayısı toplamı(kaç karakterlik ilerlenecek diye))

MsgBox "burası da sonu " & m
'(aranan alanın bitiş karakter sırası ekranda)

End If
End Sub


Şimdi böylece ilk kutunun onayını kaldırdığınızda kaldırdığınız onay kutusunun gönderdiği değerin metin kutusu içindeki kaçıncı karakter sırasında başladığını ve len komutuyla aldığımız karakter kadar ilerde bittiğini öğrendik. "Ali" ismi diyelim Ahmet ve Bahri'den sonra yeralıyor. Bu durumda Ali'nin onayını kaldırdığınızda başlama noktası olarak 13 değeri gelecektir. Bu değer Ahmet(5)+virgül(1)+Bahri(5)+Virgül(1)=12 olduğuna göre Ali'nin 13 'den başladığı anlamına gelir. 13'ten sonra Ali ve virgül kadar (yani 4 karakter) ilerlenecek.
O halde metin2 değerini bir değişkene atarken bu alanı almayacağız. Yeni oluşan değişken de metin2'nin yerine geçerek güncellenmiş olacaktır. Tabii bu işlemi tüm onay kutuları için yapmak lazım. Ve her onay kalktığında alttan bu komutların çalışması ve metin2 alanını güncellemesi lazım..

Kolaymış değil mi? ))
21/11/2008, 21:14

mehmetdemiral

Bu arada, değişkene aktarılacak değerin de alınacak bölüm ve alınmayacak bölüm olarak parçalanması lazım. Bunun için de mid komutunu kullanabiliriz. Tanımlanan a ve b değişkenlerine, alınmayacak olan az önceki mesajımda anlattığım kısım haricindekiler atanır. Mesela

Metin2 alanının içeriği ahmet,bahri,ali,mesut şeklinde sıralansın. Siz buradan ali'yi çıkartmak istediniz. O zaman yukarda anlattığım gibi, ali'nin başlangıç ve bitiş kısımlarını içermeyen bir aktarımla mid komutunu kullanarak a ve b değişkenlerine veri atarsınız.
teorik olarak şöyle bir şey:

a= mid (metin2, 1 , s)
b= mid(metin2, s , 21)
metin2= a & b
veya
metin2 = a + b

ok?