none
C#'da this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().ForEach(p => p.BackColor=Color.White); Kodunun çalşma mantığı? RRS feed

  • Soru

  • Arkadaşlar elimde bir kod var:

    this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().ForEach(p => p.BackColor=Color.White);

    bu kod bütün resimleri beyaz yapıyor

    ben bu kodun çalışma mantığını anlayamadım mesela picturebox 5 den 10'a kadar resimleri beyaz yapmak istiyorsam bu kodda nasıl bir değişiklik yapmalıyım?

    yada if() komutu ile beraber bunu nasıl kullanamabilirim yani şöyle

    if(picturebox2 den 12 ye kadar picturebox.color==color.red gibi)
      {
          ....
      }

    yani böyle şeyleri nasıl kontrol edebilirim?


    7 Nisan 2016 Perşembe 19:06

Yanıtlar

  • merhaba cihanın dedıgı gıbı ToList deki <PictureBox> yerine ToList() yapmanız lazım enumarable yapamıyor classınızı yada controlünüzü.

    düzelttim ama bi değişiklik göremedim

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    //this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().Skip(5).Take(5).ForEach(p => p.BackColor=Color.White);
    
    namespace Dalga_deneme_1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void pictureBox12_Click(object sender, EventArgs e)
            {
                this.Controls.Cast<Control>().OfType<PictureBox>().ToList().Skip(5).Take(5).ForEach(p => p.BackColor = Color.White);
            }
                //this.Controls.Cast<Control>().OfType<PictureBox>().ToList().ForEach(p => p.BackColor=Color.White); 
                //this.Controls.Cast<Control>().OfType<PictureBox>().ToList().Skip(5).Take(5).ForEach(p => p.BackColor = Color.White);
                
        }
    }

    Ben size bu kodu linq olmadan nasıl yazabileceğinizi tarif edeyim o şekilde kafanızda canlanır sanırım.

    Aşağıdaki kod ile forma eklenen 15 tane picturebox'tan 6.7.8.9.10. picturebox'lara erişiliyor. Bunun linq ile yapmak ise arkadaşların söylediği gibi çok daha kısa ve kolay.

    List<PictureBox> list = new List<System.Windows.Forms.PictureBox>();
    foreach (var control in this.Controls)
    {
    	if (control is PictureBox)
    	{
    		list.Add(control as PictureBox);
    	}
    }		
    int skip = 5;
    int take = 5;
    for (int i = skip; i < (take + skip); i++)
    {
    	var pbox = list[i];
    	Console.WriteLine(pbox.Name);
    }


    oguzkurtcuoglu.com


    9 Nisan 2016 Cumartesi 00:07

Tüm Yanıtlar

  • Merhaba MSDN de bulunan lambda ifadeleri hakkındaki desteği okumanızı tavsiye ederim

    https://msdn.microsoft.com/tr-tr/library/bb397687.aspx

    ayrıca

    this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().Skip(5).Take(5).ForEach(p => p.BackColor=Color.White);

    seklınde 0 dan 5 e kadar atlayıp daha sonrası ıcın 5 element cekerek ( 5 den sonrası için ) işlem yapabilirsiniz.

    Eğer cevapları yararlı görüyorsanız lütfen cevap olarak işaretleyerek oy verin. Bu bizlere daha sağlıklı ve pozitif bir topluluk oluşturmamıza yardımcı olacaktır. Mutlu programlamalar.

    8 Nisan 2016 Cuma 14:48
  • ToList deki <PictureBox> gereksiz.
    8 Nisan 2016 Cuma 15:22
  • Merhaba MSDN de bulunan lambda ifadeleri hakkındaki desteği okumanızı tavsiye ederim

    https://msdn.microsoft.com/tr-tr/library/bb397687.aspx

    ayrıca

    this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().Skip(5).Take(5).ForEach(p => p.BackColor=Color.White);

    seklınde 0 dan 5 e kadar atlayıp daha sonrası ıcın 5 element cekerek ( 5 den sonrası için ) işlem yapabilirsiniz.

    Eğer cevapları yararlı görüyorsanız lütfen cevap olarak işaretleyerek oy verin. Bu bizlere daha sağlıklı ve pozitif bir topluluk oluşturmamıza yardımcı olacaktır. Mutlu programlamalar.

    teşekkürler Erdem Avni SELÇUK if konusunda ne düşünüyorsunuz?
    8 Nisan 2016 Cuma 15:54
  • ToList deki <PictureBox> gereksiz.
    Hemen düzeltiyorum
    8 Nisan 2016 Cuma 15:55
  • Erdem Avni SELÇUK Şöyle bi hata aldım neden kaynaklanıyor olabilir?

    bi de Cihan Yakar ToList deki <PictureBox> ifadesini silince de hata verdi bende dokunmadım

    8 Nisan 2016 Cuma 16:08
  • merhaba cihanın dedıgı gıbı ToList deki <PictureBox> yerine ToList() yapmanız lazım enumarable yapamıyor classınızı yada controlünüzü.
    8 Nisan 2016 Cuma 19:08
  • merhaba cihanın dedıgı gıbı ToList deki <PictureBox> yerine ToList() yapmanız lazım enumarable yapamıyor classınızı yada controlünüzü.

    düzelttim ama bi değişiklik göremedim

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    //this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().Skip(5).Take(5).ForEach(p => p.BackColor=Color.White);
    
    namespace Dalga_deneme_1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void pictureBox12_Click(object sender, EventArgs e)
            {
                this.Controls.Cast<Control>().OfType<PictureBox>().ToList().Skip(5).Take(5).ForEach(p => p.BackColor = Color.White);
            }
                //this.Controls.Cast<Control>().OfType<PictureBox>().ToList().ForEach(p => p.BackColor=Color.White); 
                //this.Controls.Cast<Control>().OfType<PictureBox>().ToList().Skip(5).Take(5).ForEach(p => p.BackColor = Color.White);
                
        }
    }

    8 Nisan 2016 Cuma 19:15
  • merhaba cihanın dedıgı gıbı ToList deki <PictureBox> yerine ToList() yapmanız lazım enumarable yapamıyor classınızı yada controlünüzü.

    düzelttim ama bi değişiklik göremedim

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    //this.Controls.Cast<Control>().OfType<PictureBox>().ToList<PictureBox>().Skip(5).Take(5).ForEach(p => p.BackColor=Color.White);
    
    namespace Dalga_deneme_1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void pictureBox12_Click(object sender, EventArgs e)
            {
                this.Controls.Cast<Control>().OfType<PictureBox>().ToList().Skip(5).Take(5).ForEach(p => p.BackColor = Color.White);
            }
                //this.Controls.Cast<Control>().OfType<PictureBox>().ToList().ForEach(p => p.BackColor=Color.White); 
                //this.Controls.Cast<Control>().OfType<PictureBox>().ToList().Skip(5).Take(5).ForEach(p => p.BackColor = Color.White);
                
        }
    }

    Ben size bu kodu linq olmadan nasıl yazabileceğinizi tarif edeyim o şekilde kafanızda canlanır sanırım.

    Aşağıdaki kod ile forma eklenen 15 tane picturebox'tan 6.7.8.9.10. picturebox'lara erişiliyor. Bunun linq ile yapmak ise arkadaşların söylediği gibi çok daha kısa ve kolay.

    List<PictureBox> list = new List<System.Windows.Forms.PictureBox>();
    foreach (var control in this.Controls)
    {
    	if (control is PictureBox)
    	{
    		list.Add(control as PictureBox);
    	}
    }		
    int skip = 5;
    int take = 5;
    for (int i = skip; i < (take + skip); i++)
    {
    	var pbox = list[i];
    	Console.WriteLine(pbox.Name);
    }


    oguzkurtcuoglu.com


    9 Nisan 2016 Cumartesi 00:07
  • Ben size bu kodu linq olmadan nasıl yazabileceğinizi tarif edeyim o şekilde kafanızda canlanır sanırım.

    Aşağıdaki kod ile forma eklenen 15 tane picturebox'tan 6.7.8.9.10. picturebox'lara erişiliyor. Bunun linq ile yapmak ise arkadaşların söylediği gibi çok daha kısa ve kolay.

    List<PictureBox> list = new List<System.Windows.Forms.PictureBox>();
    foreach (var control in this.Controls)
    {
    	if (control is PictureBox)
    	{
    		list.Add(control as PictureBox);
    	}
    }		
    int skip = 5;
    int take = 5;
    for (int i = skip; i < (take + skip); i++)
    {
    	var pbox = list[i];
    	Console.WriteLine(pbox.Name);
    }


    oguzkurtcuoglu.com


    Çok teşekkürler Oğuz KURTCUOĞLU  oldu
    9 Nisan 2016 Cumartesi 08:03