Soru & Cevap

iki Listpicker listesinde yapılan seçime göre işlem yapma

04.08.2014 - 05:47

Merhabalar.Geliştirmekte olduğum projemde seçilen 2 uzunluk birimine göre çeviri yapıp sonucu ekrana yazdıracak bir uygulama geliştirmek istiyorum.Fakat şöyle bir sorunum var.Uzunluk birimlerini 2 adet ListPicker içerisinde gösterip kullanıcının bunlardan seçip yaparak hesapla butonuyla sonucu yazdırması gerekiyor..2 List picker için de uzunluk birimlerini ekledim.Örneğin

String[] birimler = {"km","m","cm","mm"};

String[] birimler2 = {"km","m","cm","mm"}; şeklinde tanımlayarak Listpicker lara kaynak olarak gösterdim.Fakat uzunluk birimlerinin sayısı fazla olduğu için aralarında yapılacak seçimler için nasıl bir algoritma oluşturabilirim? mesela km - cm olarak çevrilme durumunda ayrı hesaplama ya da m - mm olarak çevrilme durumunda farklı hesaplama yapılması gerekiyor.Birimlerin sayısı az olsaydı if deyimiyle olayı çözebilirdim.Fakat 40-50 civarında birim olacağı için if ile olayın içinden çıkamam.Konuyla ilgili daha pratik bir yöntem önerebilir misiniz? Teşekkürler.

16 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user emrah08
emrah08
05.08.2014 - 01:58

[code]

Dictionary<string, double> uzunlukDictionary = new Dictionary<string, double>(); şeklinde olacak.

[/code]

picture-2335-1379625106.jpg
rocxteady
04.08.2014 - 07:01
Bütün uzunluk birimlerinin metre karşılıklarını bir hashmapte tut: {"km":0.001,"m":1,"cm":10,"mm":1000} HashMapimizin ismi uzunlukMap olsun. double ilk = uzunlukMap.get(secilenDegerBir); double ikinci = uzunlukMap.get(secilenDegerIki); double oran = ikinci/birinci; double sonuc = girilenDeger*oran; Mobilden yazdım aceleyle. Anlaşılmayan yer var mi?
Emrah
04.08.2014 - 09:08
Cevabınız için teşekkür ederim. Yalnız aklıma şu nokta takıldı. Çeviri işlemi sırasında birimin kendisinden büyük olan değer orana bölünerek, birimin kendisinden küçük olan değer ise çarpılması gerekiyor. Bu kurguda bkonuyla ilgili bir sorun yaşanırmı? Son olarak müsait olduğunuzda biraz daha detaylı yazabilirseniz çok sevinirim. Teşekkürler
Ulaş Sancak
04.08.2014 - 09:15
Diyelim km->m seçti. oran = 1/0.001 = 1000 5 km = 5*1000 = 1000 m. doğru mu? Diyelim m->km seçti. oran = 0.001/1= 0.001 5000 m = 5000*0.001 = 5 km. İki türlü de sağlıyor. Deneyin görün.
Emrah
05.08.2014 - 11:55
Son olarak Hasmap alternatifi olarak C#'ta Dictonary class bulunmakta.Söylediğiniz gibi birimlerle değerlerini birlikte tuttum.Fakat mesela uzunlukMap.get(secilenDegerBir); double ikinci = uzunlukMap.get(secilenDegerIki); olarak yazdığınız satırlardaki get komutunun karşılığını bulamadım.Bir de "seçilenDegerBir" ve "SecilenDegerIki" yerine hangi anahtar kelimeleri yazmam gerekiyor.Çünkü bu kaynağı Listpicker'a bağlıyorum.Seçilen değerleri Listpicker üzerinden çağırmam gerekmiyor mu?
Ulaş Sancak
05.08.2014 - 01:14
Dictionary'de direkt key ile çağırılabiliyormuş. Şöyle: uzunlukDictionary[secilenDegerBir] Burada seçilen değer ListPicker'dan seçilen değer. Atıyorum 3. satır seçildi. Dizinin 3. indexindeki elemanı secilenDegerBir'e atayacaksın. O da mm oluyor bu durumda. Anlatabildim mi?
Emrah
05.08.2014 - 01:50
Orasını hallettim fakat mesela seçilen indeksin Listpicker'da sadece Key değerinin görünmesini istiyorum.Fakat double değişkenine değer atarken ise value değerinin atanmasını istiyorum.örneğin; Dictionary uzunlukDictionary = new Dictionary(); uzunlukDictionary.Add("km - Kilometre", 0.001); uzunlukDictionary.Add("m - Metre", 1); uzunlukDictionary.Add("cm - Santimetre", 10); uzunlukDictionary.Add("mm - Milimetre" , 1000); InitializeComponent(); this.lstpckr.ItemsSource = uzunlukDictionary.Keys; şeklinde kodladığımda "Keys" ile string kısımını Lİstpickerda listeleyebiliyorum.Ancak var ilk = lstpckr.SelectedItem; yazdığımda doğal olarak yine string kısmını değişkene atıyor.Keys yerine Values kullandığımda da tam tersi durum söz konusu.Biraz karışık anlatmış olabilirim umarım anlatabilmişimdir.
Emrah
05.08.2014 - 01:55
Dictionary uzunlukDictionary = new Dictionary(); satırında yanlış yazmışım. Dictionary uzunlukDictionary = new Dictionary(); şeklinde olacak.
Ulaş Sancak
05.08.2014 - 01:59
String kısmını atacak zaten. Sonra zaten dictionary'den o string ile value'yu çekeceksin. double degerBir = uzunlukDictionary[ilk];
Emrah
05.08.2014 - 04:34
Sorun çözüldü. Yardımlarınız için çok teşekkür ederim.
Ulaş Sancak
05.08.2014 - 04:51
Yardımcı olduysam cevabı kabul ediniz. Yok olmadıysam etmeyiniz. :)