Şimdi Ara

C# grafik

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
15
Cevap
0
Favori
13.855
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar C# ile yatıgım programda grafik metodu ile cizdirdigim cizgiyi form uzerindeki bir butona tıklandıgı zaman yoketmek yani silmek istiorum,
    bunu nasıl yapabilirim?..
    yardımlarınız bekliorum....



  • yokmu hiç bi fikri olan?
  • Formun üzerine çizgi çizilmek istendiğinde DrawLine() metodu kullanılıyor. Bu metot 5 parametreye sahiptir. İlk parametrede daha önce hazırlanan Pen nesnesi belirtil¬mektedir. 2. ve 3. parametreler ile çizginin başlangıç koordinatları, 4. ve 5. parametreler ile çizginin bitiş koordinatı belirtilmektedir.

    private void Ciz_Click(object sender, EventArgs e)
    {
    Graphics cizgi;
    Pen Kalem = new Pen(Color.Blue, 3);
    cizgi = this.CreateGraphics();
    cizgi.DrawLine(Kalem, 30, 30, 200, 150);
    cizgi.Dispose();
    }

    Çizilecek çizginin başlangıç ve bitiş noktalarını bu şekilde DrawLine() metoduna para¬metre olarak vermek yerine önceden Point nesnesi tanımlayabilirsiniz. Point nesnesinin nasıl kullanıldığını aşağıda görebilirsiniz.

    Graphics Cizgi;
    Pen Kalem = new Pen(Color.Blue,3);
    Point Nokta1 = new Point(20, 20);
    Point Nokta2 = new Point(120, 120);
    Cizgi = this.CreateGraphics();
    Cizgi.DrawLine(Kalem, Nokta1, Nokta2);
    Cizgi.Dispose();

    Bir seferde birden fazla düz çizgi çizmek istiyorsanız DrawLines() metodunu kullanabilirsi¬niz. Bu amaçla dizi değişken gibi işlev gören Point nesnesi hazırlanır. Aşağıdaki gibi bir Point nesnesi hazırlanırsa bir seferde 4 çizgi çizilebilir.

    Graphics Grafik;
    Pen Kalem = new Pen(Color.Blue,3);
    Point[] Cizgi = new Point[4];
    Grafik = this.CreateGraphics();
    Cizgi[0].X = 10;
    Cizgi[0].Y = 10;
    Cizgi[1].X = 100;
    Cizgi[1].Y = 40;
    Cizgi[2].X = 70;
    Cizgi[2].Y = 150;
    Cizgi[3].X = 30;
    Cizgi[3].Y = 120;
    Grafik.DrawLines(Kalem, Cizgi);
    Grafik.Dispose();

    Bu kodda grafik ve Pen nesnesi hazırlandıktan sonra Point tipinde 3 elemana sahip bir dizi değişken tanımadım. Cizgi(0).X ve Cizgi(0).Y noktası ile çizimin başlangıç noktası belirtil¬mektedir. DrawLines() metodu yerine DrawCurve() metodunu kullanırsanız düz çizgilerin yerine eğriler kullanılır. DrawCurve() metodunun nasıl kullanıldığını aşağıda görebilirsiniz.

    Graphics Grafik;
    Pen Kalem = new Pen(Color.Blue,3);
    Point[] Cizgi = new Point[5];
    Grafik = this.CreateGraphics();
    Cizgi[0].X = 20;
    Cizgi[0].Y = 40;
    Cizgi[1].X = 150;
    Cizgi[1].Y = 30;
    Cizgi[2].X = 220;
    Cizgi[2].Y = 110;
    Cizgi[3].X = 200;
    Cizgi[3].Y = 140;
    Cizgi[4].X = 30;
    Cizgi[4].Y = 100;
    Grafik.DrawCurve(Kalem, Cizgi);
    Grafik.Dispose();

    DrawCurve() metodu yerine DrawClosedCurve() metodunu kullanırsanız çizgiler birleşti¬rilir. DrawClosedCurve() metodu ile hazırlanan kapalı eğrinin içinin doldurulmasını istiyorsanız DrawClosedCurve() metodu yerine FillClosedCurve() metodunu kullanmalısınız. İçi dolu nesneler hazırlanırken Pen yerine SolidBrush nesnesini kullanmak gerektiğini biliyorsunuz.

    Graphics Grafik;
    SolidBrush Firca = new SolidBrush(Color.Blue);
    Point[] Cizgi = new Point[5];
    Grafik = this.CreateGraphics();
    Cizgi[0].X = 20;
    Cizgi[0].Y = 40;
    Cizgi[1].X = 150;
    Cizgi[1].Y = 30;
    Cizgi[2].X = 220;
    Cizgi[2].Y = 110;
    Cizgi[3].X = 200;
    Cizgi[3].Y = 140;
    Cizgi[4].X = 30;
    Cizgi[4].Y = 100;
    Grafik.FillClosedCurve(Firca, Cizgi);

    Formun üzerinde belli bir bölgeyi bir desenle boyamak istiyorsanız SolidBrush nesnesi yerine HatchBrush nesnesini kullanabilirsiniz. Bu nesnenin nasıl kullanıldığını anlat¬mak için yukarıda verdiğim kodu aşağıdaki gibi düzenledim.

    Graphics Grafik;
    System.Drawing.Drawing2D.HatchBrush Firca = new
    System.Drawing.Drawing2D.HatchBrush(
    System.Drawing.Drawing2D.HatchStyle.DarkVertical,
    Color.Blue, Color.Yellow);
    Point[] Cizgi = new Point[5];
    Grafik = this.CreateGraphics();
    Cizgi[0].X = 20;
    Cizgi[0].Y = 40;
    Cizgi[1].X = 150;
    Cizgi[1].Y = 30;
    Cizgi[2].X = 220;
    Cizgi[2].Y = 110;
    Cizgi[3].X = 200;
    Cizgi[3].Y = 140;
    Cizgi[4].X = 30;
    Cizgi[4].Y = 100;
    Grafik.FillClosedCurve(Firca, Cizgi);

    Drawing2D’de tanımlı olan HatchBrush sınıfı 3 parametreye sahiptir. İlk parametre ile desenin tarama stili ve 2. parametre ile renk seçimi yapılmaktadır. Parantezin içine “Drawing2D.HatchStyle.” yazarsanız seçebileceğiniz stilleri Visual Studio listeler. Formun üzerine çizilen elipsleri silmek veya formun üzerini temizlemek üzere formun Click() olayına karşılık gelen metodu aşağıdaki gibi düzenledim.

    private void Sil_Click(object sender, EventArgs e)
    {
    System.Drawing.Graphics Cizim;
    Cizim = this.CreateGraphics();
    Cizim.Clear(this.BackColor);
    }




  • peki ben 5 tane çember çizdim 3. çemberi silecem ama diğerlerine ellemiyecek onlar silinmiyecek yani

    bu dediğin kodları yazdım hepsini siliyo
  • Çemberleri çizerken, her çizdiğin çeberin koordinatı (Point nesnesini) List<Point> şeklinde bir jenerik listede tutabilirsin.Silmek istediğin çemberi ilk önce bu listeden Remove ile çıkartırsın.Daha sonra Cizim.Clear() ile tüm çizimleri silip ardından ayrı bir method ile bu List<Point> de saklı koordinatlara sırası ile tekrardan çizim yaparsın.
  • Nasıl yani tam anlıyamadım jenerik listede tutmayı



    < Bu mesaj bu kişi tarafından değiştirildi Bay_E87 -- 17 Kasım 2007; 17:51:53 >
  • Konuyu life19 açmış soruları sormaya devam eden Bay_E87 ilginç doğrusu(İkiside aynı kişi mi?)

    Söylediğimde anlaşılmayacak birşey yok dostum Form üzerine cizgi çizerken bir Point belirlemiyor musun?Her çizgi çizme işleminde belirlediğin Point'leri List<> generic sınıfından oluşturduğun bir nesneye ekle.Daha sonra silmek istediğin Point'i bu listeden çıkar, ardından tüm çizgileri temizle, ve bu listede geri kalan koordinatlara yeniden şekillerini çizdir.
    Örneğin form üzerinde tıkladığın her yere çember çizen bir kod yazalım;

    List<Point> pointListesi = new List<Point>();

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
    Graphics grap = this.CreateGraphics();
    grap.DrawEllipse(new Pen(Brushes.Blue), new Rectangle(e.Location, new Size(50, 50)));
    pointListesi.Add(e.Location);
    }

    pointListesi generik bir collection ve Point tipinde nesneler tutuyor.Her elips çizme işleminde çizdiğimiz elipslerin koordinatlarını bu listeye ekliyoruz.

    public void CizgiSil(Point p)
    {
    //İlgili Point'deki çizgiyi silecek kodların...
    pointListesi.Remove(p);
    Yenile();
    }

    public void Yenile()
    {
    Graphic Cizim = this.CreateGraphics();
    Cizim.Clear(this.BackColor);

    foreach(Point po in pointListesi)
    {
    Cizim.DrawEllipse(new Pen(Brushes.Blue), new Rectangle(po, new Size(50, 50)));
    }
    }


    Umarım bu sefer anlarsın.




  • ilk soruna gelince life 19 değilim

    kodları çok güzel ayrıntılı anlattığın için saolasın mantığını kavrıyacak kadar açıklamalı olmuş saol tekrardan
  • ben bunları aynen yazdım sadece çember çiziyo her tıklamamda ama silmiyo neden anlıyamadım
  • Neden internette GDI+ araştırmıyorsun??Bu şekilde sürekli sorun çıkacak ve sen buraya yazacaksın bizde kod mu göndericez???
    Üstelik yazdığın kodları da vermemişsin nerde yalnış yaptığını da bilmiyoruz..Muhtemelen anlattıklarımı anlamadın ve yalnış kodlama yaptın.Sonkez HAZIR kod veriyorum.Aşağıdaki kod ekrana rectangle çizer ve her sil butonuna bastığında çizdiğin rectangle'ları teker teker geri siler.Bu yüzden Form'a bir buton koy ve adını btnClear yap.

     
    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    List<Point> lstPoint = new List<Point>();

    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
    Graphics grp = CreateGraphics();
    grp.DrawRectangle(new Pen(Brushes.Red), new Rectangle(e.Location, new Size(50, 50)));
    lstPoint.Add(e.Location);
    }

    private void btnClear_Click(object sender, EventArgs e)
    {
    Graphics grp = CreateGraphics();
    grp.Clear(BackColor);

    if (lstPoint.Count > 0) lstPoint.RemoveAt(lstPoint.Count - 1);
    foreach (Point recPoint in lstPoint)
    {
    grp.DrawRectangle(new Pen(Brushes.Red), new Rectangle(recPoint, new Size(50, 50)));
    }
    }
    }
    }




  • Slm herkeze, konu açılmışken benimde bir sorum olacak.Formun üstüne çizdirdiğimiz herhangi bir şekli mouse ile nasıl drag&drop yapabiliriz?
  • quote:

    Orjinalden alıntı: EvinRude

    Slm herkeze, konu açılmışken benimde bir sorum olacak.Formun üstüne çizdirdiğimiz herhangi bir şekli mouse ile nasıl drag&drop yapabiliriz?



    drag drop olayları olması lazım onları kullanman gerekir. yanlış bilmiyorumdur İNŞALLAH
  • Selam arkadaslar odev var yapamadim.hoca dedi visual studioda bezier ve b spline egrisi kullanarak turk bayragi cizin yardimci olacak biri varmi?
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.