C#'da Denklem Düzenleyicisi Yapmak

  • Konuyu başlatan Konuyu başlatan deaw
  • Başlangıç tarihi Başlangıç tarihi

deaw

Asistan
Katılım
3 Mayıs 2013
Mesajlar
365
Reaksiyon puanı
10
Puanları
18
Herkese merhabalar. C#'da üzerinde çalıştığım bir proje var fakat bir konuda 5 aydır takıldım ve çözüm bulamıyorum. Aynen Microsoft Mathematics'de olduğu gibi tuşa basıldığında kesir çizgisi çizen, pay ve payda kısmına ayrı ayrı sayılar girip hafızaya alıp işlem yapabilen programı yazmak istiyorum. Latex, Matex, OC gibi kütüphaneler buldum ama benim işime yarar düzeyde değildi. Bir fikri olan var ve paylaşırsa sevinirim. Şimdiden teşekkürler.
V36zBn.png
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Konum
Münster
Merhaba,

bunu Windows Form ile yapmanız biraz zor olur gibi geliyor bana. Bayağı bir uğraş verirsiniz. Ancak C#/WPF ile dizayn ile daha verimli ve hızlı olabilirsiniz. Diğer detayları da (kullanıcı etkileşimleri gibi) sınıf bazında arka planda hazırlarsınız. Yine farklı bir projede bir kütüphane açarak da matematik işlemlerini hesaplarsınız. Proje çatısı önerim MVVM. İşlemlerinizi yapmak istediğiniz, matematik şekillerini göstermek istediğiniz yapı ise "User Control" olarak Wpf projesi altında geliştirmenizi tavsiye ederim. Veya bunun yerine dinamik olarak kullanıcıdan aldığınız komutlara göre çizim yapan bir sınıf da tasarlayabilirsiniz.

1. Proje : C# / WPF

View'leriniz => WPF Window
ViewModel'leriniz => Class
Model => DataContext/DataService Class

2. Proje : C# Class Library

Matematik işlemlerinize ve detaylarınıza göre burada temel işlemlerinizi yapan sınıflarınızı hazırlarsınız.


İkinci projedeki kütüphanenizi birinciye referans olarak ekleyin. İki projenizi de aynı anda geliştirebilirsiniz. Wpf teknolojisi size dizayn olarak her konuda çözüm getiriyor. Siz planlayın ve ardında kodlara dökün.. Hepsi bu kadar.

Burada önemli olan, sadece siz kullanıcıya nasıl bir görsellik sunmak istiyorsunuz ?..

Sagılarımla
 

deaw

Asistan
Katılım
3 Mayıs 2013
Mesajlar
365
Reaksiyon puanı
10
Puanları
18
Merhaba,

bunu Windows Form ile yapmanız biraz zor olur gibi geliyor bana. Bayağı bir uğraş verirsiniz. Ancak C#/WPF ile dizayn ile daha verimli ve hızlı olabilirsiniz. Diğer detayları da (kullanıcı etkileşimleri gibi) sınıf bazında arka planda hazırlarsınız. Yine farklı bir projede bir kütüphane açarak da matematik işlemlerini hesaplarsınız. Proje çatısı önerim MVVM. İşlemlerinizi yapmak istediğiniz, matematik şekillerini göstermek istediğiniz yapı ise "User Control" olarak Wpf projesi altında geliştirmenizi tavsiye ederim. Veya bunun yerine dinamik olarak kullanıcıdan aldığınız komutlara göre çizim yapan bir sınıf da tasarlayabilirsiniz.

1. Proje : C# / WPF

View'leriniz => WPF Window
ViewModel'leriniz => Class
Model => DataContext/DataService Class

2. Proje : C# Class Library

Matematik işlemlerinize ve detaylarınıza göre burada temel işlemlerinizi yapan sınıflarınızı hazırlarsınız.


İkinci projedeki kütüphanenizi birinciye referans olarak ekleyin. İki projenizi de aynı anda geliştirebilirsiniz. Wpf teknolojisi size dizayn olarak her konuda çözüm getiriyor. Siz planlayın ve ardında kodlara dökün.. Hepsi bu kadar.

Burada önemli olan, sadece siz kullanıcıya nasıl bir görsellik sunmak istiyorsunuz ?..

Sagılarımla
Hocam öncelikle ilginiz için teşekkürler. WPF hakkında çok bilgim yok. Yani tüm programı WPF üzerinden mi yazmak zorundayım ? "MVVM" sanırım bununla ilgiliydi. Açıklarsanız sevinirim. Ayrıca eğer olabilirse Matlab'da grafik çizdirme ve çarpanlarına ayırma gibi fonksiyonları kullanabilir miyim ?

Mesela deneme için yaptığım pisagor programı; Ben checkbox lar ile seçilen bir program yapmayı hedeflemiştim ama iş o kadar kolay olmuyor çünkü çok fazla kombinasyon var. Her yer checkbox oluyor bu işlemleri tek bir textbox içerisinde yaptırmak istiyorum. Programı bu şekilde geliştirerek. Çizilen şekli algılayıp (üçgen, kare, çember) ona göre işlemler yapabilen bir program tasarlamak. Kısacası bir geometri programı gibi tabi tüm geometri kurallarını aktaramam ama yapabildiğim kadarını yapacağım. Hem yazılım anlamında kendimi geliştirmek hem de geometri alanında kendimi geliştirmeyi hedefliyorum. Saygılarımla..
0GLYoL.png
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Konum
Münster
Merhaba,

ilk olarak bütün projenizi WPF ile yazmak zorunda değilsiniz. Sadece size öneride bulundum. MVVM bir programlamada tasarım deseni (Design Pattern) olarak geçiyor. Veya proje çatısı gibi kelimelerde kullanılabiliyor. Genel olarak WPF ile çok sık kullanılan tasarım desenidir.

İlk olarak yazmak istediğiniz program kullanıcıya görsellik hitap ediyor. Ayrıca arka planda detaylı matematik işlemleri. MATLAB'ın şu an için WPF kadar dizayna yönelik destek ve detay verip vermediğini bilemiyorum çok uzun zaman önce kullandım ve şu an için size yanlış bir bilgi vermek istemiyorum. Size başlamadan önce fikir edinmeniz açısından bazı noktalara dikkat etmenizi önereceğim. Bunlardan bazıları;

1- Kullanıcı dostu denilen programlar, kullanıcıyı kullanım karmaşasından korumak zorundadır. Kullanıcı, kullandığı programda asla kaybolmamalı.

2- Kullanıcı yaptığı işlemi görsel olarak da anlayabilmelidir. Çünkü tasarlamayı düşündüğünüz program hem arka planda matematik işlemleri yapacak, hem de aynı zamanda yaptığı işlemleri karmaşıklaştırmadan ve kullanıcının anlayabileceği şekilde sunacak.

3- Yazdığınız proje sadece işiniz bittiğinde biten bir yapıya sahip olmamalı. Bunun nedeni ise her zaman yeniliklere açık ve geliştirilebilir olmal ki; programa yeni bir sınıf (class) veya görsellik eklediğiniz zaman hem size eklemesi/güncellemesi kolay olsun hem de okunabilirliği, integrasyonu kolay olsun.

Ayrıca C# ile de istediğiniz herşeyi yazabilirsiniz. Sadece başlangıçta planlamanızı düzgün yapın. Örnek olarak; kullanıcı tarafından bir formül yazıldığı esnada programınız da aynı zamanda buna ayak uydurmalı. Mesela klavyelerde payda da karekök göstermek için şansınız yok. Bu demektir ki; kullanıcıya klavye sunmanız gerekiyor. Bunu yaptıktan sonra yazarken ekranda kullanıcıya sunmak için bir alan gerekiyor ve bu alan içerisinde kullanıcı, hazırladığınız klavyeden bastığı özel matematik işaretlerini gösterecek. İşte tam bu esnada WPF devreye giriyor. WPF teknolojisi size XAML kodlamayı sunar. XAML ile ekrana hayalinizdeki klavyeyi geliştirip çağırırsınız ve kullanıcı tuşlarkende önceden hazırladığınız WPF Formun üstündeki alanda gösterimleri yapabilirsiniz. Ben olsaydım programa payda ve karekök için çizim yaptırmak yerine bir klasör altında bu işaretlere ait resimler tutardım ve gerekli yerde program içerisinen çağırırdım. Büyüklüklerinide XAML kodlama ile kolayca da ayarlayabilirsiniz. Numara girişlerinde ise resim çağırmak yerine yine XAML kodlama içerisinden ilgili yere kontrollerin margin özelliği yardımıyla kaydırma yapıp istediğiniz yere öteleyebilirsiniz.

Kullanıcıdan aldığınız verileri MVVM çatısında ViewModel kısmında görevli olan sınıflar (class) aracılığı ile düzenleyebilir ve yine MVVM çatısı altında Model sınıfınıza (class) göndererek işlemleri yapabilirsiniz. Model sınıfınız içerisine istediğiniz bütün metodları yazıp daha sonradan da ViewModel içerisinden çağırabilirsiniz.

İki adet resim ekledim. Birisi proje açılması (proje_seçimi.png), diğeri ise genel görünüm (proje_yapısı.png). Proje yapısı resiminde gözüken Design klasörü altındaki DesignDataService.cs sınıfını projenizden çıkarın. Model klasörünüz sizin temel işlemlerinizi yapabileceğiniz sınıfınız. Örnek olarak bütün matematik işlemlerinizin yeri burası. Sonuçları isteyene IDataService üzerinden gönderirsiniz. IDataService içerisinde istediğiniz metodları tanımlayın ve DataService sınıfınıza miras verin (DataService : IDataService). Gerekli metodlar otomatik olarak eklenmiş olacak. Değilse ekleme işlemini yapın.

MainWindow.xaml'a çift tıkladığınızda gelen ekranın alt kısmında XAML kodlama ekranını göreceksiniz. XML tanımlamalarının aynısı ancak özellikleri farklı.

Burada sadece size giriş için basitçe mantığı anlatmaya çalıştım. Fikir vermek adına olan bir örnekti. Birkaç detay daha var ancak bunuda başlamaya karar verirseniz yazışırız.

Saygılarımla
 

Ekli dosyalar

  • proje_seçimi.png
    proje_seçimi.png
    66.5 KB · Görüntüleme: 1,422
  • proje_yapısı.png
    proje_yapısı.png
    51.1 KB · Görüntüleme: 1,377

deaw

Asistan
Katılım
3 Mayıs 2013
Mesajlar
365
Reaksiyon puanı
10
Puanları
18
Merhaba,

ilk olarak bütün projenizi WPF ile yazmak zorunda değilsiniz. Sadece size öneride bulundum. MVVM bir programlamada tasarım deseni (Design Pattern) olarak geçiyor. Veya proje çatısı gibi kelimelerde kullanılabiliyor. Genel olarak WPF ile çok sık kullanılan tasarım desenidir.

İlk olarak yazmak istediğiniz program kullanıcıya görsellik hitap ediyor. Ayrıca arka planda detaylı matematik işlemleri. MATLAB'ın şu an için WPF kadar dizayna yönelik destek ve detay verip vermediğini bilemiyorum çok uzun zaman önce kullandım ve şu an için size yanlış bir bilgi vermek istemiyorum. Size başlamadan önce fikir edinmeniz açısından bazı noktalara dikkat etmenizi önereceğim. Bunlardan bazıları;

1- Kullanıcı dostu denilen programlar, kullanıcıyı kullanım karmaşasından korumak zorundadır. Kullanıcı, kullandığı programda asla kaybolmamalı.

2- Kullanıcı yaptığı işlemi görsel olarak da anlayabilmelidir. Çünkü tasarlamayı düşündüğünüz program hem arka planda matematik işlemleri yapacak, hem de aynı zamanda yaptığı işlemleri karmaşıklaştırmadan ve kullanıcının anlayabileceği şekilde sunacak.

3- Yazdığınız proje sadece işiniz bittiğinde biten bir yapıya sahip olmamalı. Bunun nedeni ise her zaman yeniliklere açık ve geliştirilebilir olmal ki; programa yeni bir sınıf (class) veya görsellik eklediğiniz zaman hem size eklemesi/güncellemesi kolay olsun hem de okunabilirliği, integrasyonu kolay olsun.

Ayrıca C# ile de istediğiniz herşeyi yazabilirsiniz. Sadece başlangıçta planlamanızı düzgün yapın. Örnek olarak; kullanıcı tarafından bir formül yazıldığı esnada programınız da aynı zamanda buna ayak uydurmalı. Mesela klavyelerde payda da karekök göstermek için şansınız yok. Bu demektir ki; kullanıcıya klavye sunmanız gerekiyor. Bunu yaptıktan sonra yazarken ekranda kullanıcıya sunmak için bir alan gerekiyor ve bu alan içerisinde kullanıcı, hazırladığınız klavyeden bastığı özel matematik işaretlerini gösterecek. İşte tam bu esnada WPF devreye giriyor. WPF teknolojisi size XAML kodlamayı sunar. XAML ile ekrana hayalinizdeki klavyeyi geliştirip çağırırsınız ve kullanıcı tuşlarkende önceden hazırladığınız WPF Formun üstündeki alanda gösterimleri yapabilirsiniz. Ben olsaydım programa payda ve karekök için çizim yaptırmak yerine bir klasör altında bu işaretlere ait resimler tutardım ve gerekli yerde program içerisinen çağırırdım. Büyüklüklerinide XAML kodlama ile kolayca da ayarlayabilirsiniz. Numara girişlerinde ise resim çağırmak yerine yine XAML kodlama içerisinden ilgili yere kontrollerin margin özelliği yardımıyla kaydırma yapıp istediğiniz yere öteleyebilirsiniz.

Kullanıcıdan aldığınız verileri MVVM çatısında ViewModel kısmında görevli olan sınıflar (class) aracılığı ile düzenleyebilir ve yine MVVM çatısı altında Model sınıfınıza (class) göndererek işlemleri yapabilirsiniz. Model sınıfınız içerisine istediğiniz bütün metodları yazıp daha sonradan da ViewModel içerisinden çağırabilirsiniz.

İki adet resim ekledim. Birisi proje açılması (proje_seçimi.png), diğeri ise genel görünüm (proje_yapısı.png). Proje yapısı resiminde gözüken Design klasörü altındaki DesignDataService.cs sınıfını projenizden çıkarın. Model klasörünüz sizin temel işlemlerinizi yapabileceğiniz sınıfınız. Örnek olarak bütün matematik işlemlerinizin yeri burası. Sonuçları isteyene IDataService üzerinden gönderirsiniz. IDataService içerisinde istediğiniz metodları tanımlayın ve DataService sınıfınıza miras verin (DataService : IDataService). Gerekli metodlar otomatik olarak eklenmiş olacak. Değilse ekleme işlemini yapın.

MainWindow.xaml'a çift tıkladığınızda gelen ekranın alt kısmında XAML kodlama ekranını göreceksiniz. XML tanımlamalarının aynısı ancak özellikleri farklı.

Burada sadece size giriş için basitçe mantığı anlatmaya çalıştım. Fikir vermek adına olan bir örnekti. Birkaç detay daha var ancak bunuda başlamaya karar verirseniz yazışırız.

Saygılarımla
Hocam kusura bakmayın derslerden çok vakit bulup yazamıyorum. Bu hafta uğraşacağım. Bu fikirleriniz ve önerileriniz benim için çok önemli. Biraz deneme yapacağım eğer bir sıkıntı çıkarsa kapınızı çalarım. :) Çok teşekkürler..
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Konum
Münster
Merhaba,

rica ederim. İlim sahibi Rabbimdir. Bizede verdiğini saklamak değil, paylaşmak yakışır. Her zaman istediğinizi sorabilirsiniz. Müsait olduğumca da yardım ederim.

Saygılarımla
 
Üst