Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Aceminin C# sorulari

Başlatan z, 30 Mayıs 2012, 08:19:05

Mucit23

Güncell

Arkadaşlar ciddi anlamda yardıma ihtiyacım var.

SERRO EFE

Bir kaç projemde zedgraph kullanmıştım memnun kaldım. İstediğin özellik varmı yokmu bilmiyorum ama deneyebilirsin.
Birisi senin isteğine benzer bişey yapmış.
http://jenyay.net/ZedGraph/ManyYAxis

http://sourceforge.net/projects/zedgraph/

peko

Alıntı Yap
            chart1.ChartAreas[0].AxisY.Maximum = 50000;
            chart1.ChartAreas[0].AxisX.Maximum = 360;

Ayarlardan nasıl yapacağımı bulamadım bir türlü.

Şimdi X eksenini deki grid sayısını arttırmak istiyorum. X eksenini 360 birim uzunluğunda ayarladım ama ekranda 3 tane grid var sadece. Bunun sıklığını nasıl arttırırım.

Chart'ın okadar çok ayarı varki hangisi benim işimi görüyor nerde bulamıyorum bir türlü.

Tavsiyem chart'ın ayarları ile uğraşmak istemiyorsan, en azından işine yarayacak kadar kısmını kontrol altına al.

Grid'a bak, ben bunun üzerinde ne yapmak isteyeceğim ?


  • X birim değiştir.
    Y birim değiştir.
    X'e göre Y değiştir.
    Y'ye göre X değiştir.
    Line ekle/çıkar (X,Y)
...

Bunlara metod yaz.

Gelen verilerle de Event'leri tetikle. Mesela normalde ekranda x birimde 10 line olması gerekiyorsa, 0,x birimde 5 line olmasını sağla gibi..

işin sonunda senin grid'i şekillendirmek için herhangi bir manuel veri girmiyor olman gerek.

Kısacası; aynı osiloskop ekranının gelen sinyale göre kendini kalibre etmesi şeklinde bir kontrol  elde et.

Sonrasını zaten sen gelen veri yapıyor..
Sen bir daha grid'le uğraşmıyorsun.

Kontrolsüz güç, güç değildir  ::)

Kolay gelsin..
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

Mucit23

#228
Anladığım kadarıyla Visual Studio'nun kendi grafikleri yetersiz. Bazı ayarları mutlaka kod ile vermek gerekiyor. Properties bölümünden yapılsa bile kısıtlı oluyor.
Ben bi ara dev express felan kurdum onla ilerleyeyim dedim ama onunlada fazla karıştırmak istemedim.

Aslında kodla birşeye kadar getirdim. Grafiğin ufak tefek ayrıntıları kaldı.



Sormak istediğim birkaç şey kaldı.
Sağ üst köşedeki Series1 yazısını kaldıramıyorum. Ayarlar bölümünde o yazının değiştirildiği kısımdan yazıyı değiştirebiliyorum. Yazıyı komple sildiğimde tekrardan Series1 yazısı yerine geliyor. Kaldırmanın bir yolu varmı?

X ekseninde ise Min Value ve Max_value değerleriyle X ekseninin değerlerini verebiliyorum. 
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = 180;
Buradaki ayarlardan minimun değeri -90, Max değer +90 yapsam tam istediğim gibi oluyor. Fakat bu sefer başka bir problem oluşuyor. X eksenine nokta eklemem gerektiğinide doğrudan X ekseninde -90 dan başlaması gerekekirken 0 dan başlıyor. Aşağıdaki resim açıklayıcı olur sanırım.


Burada Chart her bir veri gönderdiğimde X ekseninin sayacı artıyor. Yeni bir veri gönderdiğimde sonraki noktaya veri ekleniyor. Chart ilk açıldığında X ekseninin tutulduğu sayacın değerini -90 yaparsam sanırım olur ama bunu nasıl yaparım bilmiyorum. Biraz karıştırayım.

mesaj birleştirme:: 16 Mayıs 2015, 23:47:29

Tamam chart1.Series[0].Points.AddXY(X_val,Y_val); işimi görüyor. Kordinatlarla ilgili problem kalmadı.
Sağdaki Series yazısını kaldırabilirsek süper. Olmasada sağlık olsun.

fatih6761


Mucit23

Evet Bu işlemde halloldu. Çözüm" IsVisibleInLegend property to false" Satırında. @ fatih6761 Teşekkürler.

Son olarak Formu ilk çalıştırdığımda Chart aktif olmuyordu. Ancak bir veri gönderince aktif hale geliyor. Bunun bir çözümü varmı? Ben form açılırken boş bir veri göndererek geçici olarak hallettim ama hiç aklıma yatmadı.

blacklogic

Daha fazla.degistiremezsin sonucta o grafik bir win apidir ve o toolun sana sundugu bellidir. Sifirdan da yazmayi hic denemedik. Daha iyi grafik icin telerik eklentisi kullanabilirsin ama paralidir. 1 ay ucretsiz paketle işini vorebilirsin. Birde wpf var onu arastirabilirsin ama xaml bilmen gerekir.

Mucit23

Arkadaşlar C# da USB ile Pic tarafına veri göndermeye çalışıyorum. Usb library'si için Aşağıdaki linkteki usbHidPort isimli dll yi kulanıyorum.
https://320volt.com/pic18f4550-ccs-c-usb-termometre/
Pic tarafına veri gönderirken hangi fonksiyonu kullanıyoruz. Kullanımı nasıl? Bulamadım bir türlü

Mucit23

#233
USB işini hallettim.

Değişken işide tamam. Tür belirtmek gerekiyormuş.

Mucit23

#234
Selamlar

C# da chart ayarları konusunda biraz yardıma ihtiyacım var.

Chart'ın türünü Spline yaptım. Line chart olacak. 24 saatlik veriler var. Şu anda bu verileri charta basıyorum.

Chartın X eksenini zaman eksenini yapmak istiyorum. X eksenindeki giridlere sırayla label nasıl eklerim. Örneğin Chartın x ekseninin 1 saat aralıklarla 24 parçaya böleyim. Label ler ile bunu belirteyim.

Bunu nasıl yaparım?

mesaj birleştirme:: 19 Şubat 2016, 11:36:35

X ekseninin max ve min değerleriyle oynayarak chartı istediğim gibi yaptım.

Yalnız X eksenindeki değerleri düzenleyemiyorum. X eksenindeki zaman değerlerini düzenlesem tamam olacak.
Değerlerin zaman olarak görünmesi için Series kısmında XvalueType değerini time şeklinde ayarladım. Tam istediğim gibi oldu. Fakat X eksenindeki değerleri değiştiremiyorum.

Zilyon tane ayarı var bu chartın. X eksenindeki değerleri nasıl düzenlerim bilgisi olan var mı?

vitruvius

#235
Veriyi çizelgeye nasıl yazıyorsunuz?

mesaj birleştirme:: 19 Şubat 2016, 12:05:33

İstediğiniz böyle bir şey mi?

private void Form1_Load(object sender, EventArgs e)
        {
            chart1.ChartAreas[0].AxisX.Interval = 1;
            chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -90;
            var dateStr = "02/19/2016 00:00:00 AM";
            DateTime dt = DateTime.ParseExact(dateStr, "MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
            

            for (int i = 0; i < 24; i++)
            {
                TimeSpan ts = new TimeSpan(i, 0, 0);
                dt = dt.Date + ts;
                this.chart1.Series["V"].Points.AddXY(dt.ToString("HH:mm"), i*3);
            }
        }



Mucit23

Hocam X eksenindeki değerleri öyle olacak.

chart1.Series[0].Points.Add(sayi); fonksiyonu ile charta yeni bir veri ekliyorum. Yalnız bendeki veri sayısı 1440. 24 Saat boyunca 1 dakika aralıklarla ölçüm alınıyor.

Örnek sayısı biraz fazla. O kısmı nasıl ayarlaycağım?

vitruvius

Interval değeriyle oynayıp kaç eşit parçaya bölmesini istediğini ayarlayabilirsin.

1440/24 = 60

Aşağıdaki program da teorik olarak her dakikada bir veri yazıyor.

private void Form1_Load(object sender, EventArgs e)
        {
            chart1.ChartAreas[0].AxisX.Interval = 60;
            chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -90;
            var dateStr = "02/19/2016 00:00:00 AM";
            DateTime dt = DateTime.ParseExact(dateStr, "MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
            

            for (int i = 0; i < 24; i++)
            {
                TimeSpan ts = new TimeSpan(i, 0, 0);
                dt = dt.Date + ts;
                for (int k = 0; k < 60; k++)
                    this.chart1.Series["V"].Points.AddXY(dt.ToString("HH:mm"), i + 10);                
            }
        }



Mucit23

Hocam sağolun şimdi hallettim sayenizde. Tam anlamıyla istediğim gibi oldu Teşekkür ederim.

Mucit23

Hocam  bir sorum daha olacak.

En son verdiğiniz örnek gayet iyi çalışıyor. Fakat şöyle bir sorun var. Charta bir kere veri basıp sonra farklı bir dosya açıp tekrar grafik çizmeye kalksam çizmiyor. Chart'da eski grafik aynen duruyor. Acaba Charta yeni bir data basmadan önce eskisini silmek mi gerekiyor?

Aktif çalışan kodlar aşağıdaki gibi.
  
        private void button2_Click(object sender, EventArgs e)
        {
            string temp = "";
            int i = 9;
            FileStream fs = new FileStream(DosyaYolu, FileMode.OpenOrCreate, FileAccess.Read);
            StreamReader sw = new StreamReader(fs);

            var dateStr = "02/19/2016 00:00:00 AM";
            DateTime dt = DateTime.ParseExact(dateStr, "MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);

            //chart1.Series.RemoveAt(0);

            for(int saat=0;saat<24;saat++)
            {

                TimeSpan ts = new TimeSpan(saat+1, 0, 0);
                dt = dt.Date + ts;

                for (int dak = 0; dak < 60; dak++)
                {
                    string yazi = sw.ReadLine();

                    i = 9;
                    temp = "";
                    while (yazi[i] != 'C')
                    {
                        temp += yazi[i];
                        i++;
                    }

                    float sayi = float.Parse(temp);

                    sayi = sayi / 10;

                    chart1.Series[0].Points.AddXY(dt.ToString("HH:mm"), sayi);
                }

            }

            sw.Close();
            fs.Close();
            
        }
           


Sorun ne olabilir? Yukarıdaki kodlar çalışınca dosyadan veriler okunup ekrana sırayla basılıyor.