19 Ocak 2014 Pazar

C SHarp Form Uygulamalar Treeview Nesnesinin Kullanımı ve Treeview Nesnesine İkon Ekleme



KONU : C Sharp ( C# ) Form Uygulamalar Treeview Nesnesinin Kullanımı, Alt alta node ekleme, Eklenen nodeların ikonlarını değiştirme, C Sharp Treeview farklı seviyeler için farklı ikon kullanımı, c sharp treeview nesnesine ikon bağlama ve ikon seçme.
ETİKETLER : csharp treeview kullanımı - csharp treeview - csharp treeview example - csharp treeview selected node - c# treeview - c# treeview örnek - c# treeview selected node - c# tree - c# tree view - c# tree node - c# treeview add node - c# treeview add - c# treeview add image to node - c# treeview add root node - c# treeview add nodes dynamically






UYGULAMAYI İNDİR



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;

namespace TreeView
{
    public partial class Form1 : Form
    {

        private System.Windows.Forms.TreeView treeView;
        private System.Windows.Forms.Label lblHangiNodeTiklandi;

        public Form1()
        {
            InitializeComponent();
            InitializeMyComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //treeview ya bir ikon ekleme, burada iki farklı ikon ekle
            //birincisini en üst nodelar için kullan
            //diğer ikonu sadece en alt nodelar için kullan

            ImageList il = new ImageList();
            il.Images.Add(new Icon("folder.ico"));
            il.Images.Add(new Icon("Turkiye.ico"));
            treeView.ImageList = il;

            //treeview için bir node oluştur .Bu ana node olacak  adıda  "System Database" olsun
            
            TreeNode node = new TreeNode("System Database");
            
            ////Ana node altına 4 tane node ekleyelim

            node.Nodes.Add("Attributes");
            node.Nodes.Add("Positions");
            node.Nodes.Add("Radio Trunks");
            node.Nodes.Add("Line Trunks");

            // 2. alt nodun altına da yeni node lar  ekleyelim
           
            for (int i = 0; i < 2; i++)
            {
                node.Nodes[1].Nodes.Add("POS " + (i + 1));
               
                // Bu node un resmini değiştir => türkiye.ico olarak güncelleyelim
                // bunun için bu node un alt node larınının imageindex ini 1 yapmamız yeterli olacak

                node.Nodes[1].Nodes[i].ImageIndex = 1;
            }
            

            // 3. alt nodun altına da yeni node lar  ekleyelim

            for (int i = 0; i < 8; i++)
            {
                node.Nodes[2].Nodes.Add("RADIO" + (i + 1));

                // Bu node un resmini değiştir => türkiye.ico olarak güncelleyelim.

                node.Nodes[2].Nodes[i].ImageIndex = 1;
            }

            // 4. alt nodun altına da yeni node lar  ekleyelim

            for (int i = 0; i < 4; i++)
            {
                node.Nodes[3].Nodes.Add("LINE" + (i + 1));

                // Bu node un da resmini değiştirelim. 
                
                node.Nodes[3].Nodes[i].ImageIndex = 1;
            }

            //ana node u treeview a eklenince ağaç görünümümüz oluştu

            treeView.Nodes.Add(node);
 
        }

        /// treeview da bir eleman seçilmiş veya tıklanmış ise  bu metot tetiklenecek
        /// bu işlemi InitializeMyComponent metodunda treview nesnesinin afterselect olayına
        /// bu metodu bağlayarak gerçeklerştirdim.
        
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            //treeview da bir node tıklanınca o node ile ilgili istediğimi  işlemi yaptıralım

            //Eğer seçili bir node yoksa hiçbir şey yapmadan geri dönsün

            if (treeView.SelectedNode == null)
            {
                return;
            }


            //form yerleştirdiğim etikete tıklanan nodun text değerini yazdıracağım

            lblHangiNodeTiklandi.Text = "Tıklanan Node :" + treeView.SelectedNode.Text;

            //Seçilen veya tıklanan node ile ilgili işlemleri aşağıdaki gibi yapabilirim

            if (treeView.SelectedNode.Text == "System Database")
            {
                MessageBox.Show("burada Ana node " + treeView.SelectedNode.Text + 
                    " ile ilgili işlmeler yaptırılır");
            }
            else if (treeView.SelectedNode.Text == "Positions")
            {
                MessageBox.Show("burada Alt node " + treeView.SelectedNode.Text +
                    " ile ilgili işlmeler yaptırılır");
            }
            else if (treeView.SelectedNode.Text == "Radio Trunks")
            {
                MessageBox.Show("burada Alt node " + treeView.SelectedNode.Text +
                    " ile ilgili işlmeler yaptırılır");
            }
            else if (treeView.SelectedNode.Text == "Line Trunks")
            {
                MessageBox.Show("burada Alt node " + treeView.SelectedNode.Text + 
                    " ile ilgili işlmeler yaptırılır");
            }
        }

        /// 
        /// programda kullanılacak kontrollerin ayarlarını yapma.
        /// 
        private void InitializeMyComponent()
        {
            this.treeView = new System.Windows.Forms.TreeView();
            this.lblHangiNodeTiklandi = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // treeView
            // 
            this.treeView.Location = new System.Drawing.Point(12, 12);
            this.treeView.Name = "treeView";
            this.treeView.Size = new System.Drawing.Size(161, 349);
            this.treeView.TabIndex = 0;
            this.treeView.AfterSelect += new 
                System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
            // 
            // lblHangiNodeTiklandi
            // 
            this.lblHangiNodeTiklandi.AutoSize = true;
            this.lblHangiNodeTiklandi.Location = new System.Drawing.Point(244, 24);
            this.lblHangiNodeTiklandi.Name = "lblHangiNodeTiklandi";
            this.lblHangiNodeTiklandi.Size = new System.Drawing.Size(35, 13);
            this.lblHangiNodeTiklandi.TabIndex = 1;
            this.lblHangiNodeTiklandi.Text = "label1";
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(398, 490);
            this.Controls.Add(this.lblHangiNodeTiklandi);
            this.Controls.Add(this.treeView);
            this.Name = "Form1";
            this.Text = "Treview Application";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }
    }
}

UYGULAMAYI İNDİR

14 yorum :

  1. iyi günler benim bir sorum olacaktı. treeview ile bir proje yapmaktayım ve bir yeri halledemedim. kod şu şekilde:
    Form2 frm2git2 = new Form2();
    frm2git2.ShowDialog();
    string deger2 = frm2git2.textBox1.Text;
    int sec = treeView1.SelectedNode.Index;
    string dugum = treeView1.SelectedNode.Text;
    int seviye = treeView1.SelectedNode.Level;

    if (seviye == 0)
    {
    treeView1.Nodes[sec].Nodes.Add(deger2);
    }
    else if (seviye == 1)
    {
    treeView1.Nodes[sec].Nodes[sec].Nodes.Add(deger2);
    }
    else if (seviye == 2)
    {
    treeView1.Nodes[sec].Nodes[sec].Nodes[sec].Nodes.Add(deger2);
    }

    burada seçili node nın altına ekleme yapmak istiyorum fakat seçili node hep aynı node oluyor bu sorunu nasıl çözebilirim yardımcı olabilir misiniz acaba?

    YanıtlaSil
  2. Yeterli bilgi vememişsin.


    bu kodu nereye yazdın. Yani hangi olay yada fonksiyona bağladın.

    selectedNode özelliğini doğru kullanmak için
    treeview1 nesnesinin AfterSelect olayında bu kodu çağırmalısın. Eğer başka bir yerde mesela buton click olayında bu işlemleri yapıyorsan hep aynı dönecektir.

    birde form2 neyi gösteriyorsun?

    biraz detay verirsen veya kodun tümüyle payşaşırsan daha fazla yardımcı olabilirim.

    YanıtlaSil
  3. öncelikle yardımcı olduğunuz için teşekkür ederim. burada amacım, form1 deki treeview nesnesine form2 de bulunan textbox ın değerini göndermekti. bir de gelen bu değer hangi node seçili ise onun alt node na eklenmesini istiyordum. if - else yapısındaki node lara eklediğim sec değişkeni hep aynı olduğu için hep aynı dala ekleme yapıyordu, sonradan problemi çözdüm, şöyle ki;
    if (seviye == 0)
    {
    treeView1.Nodes[sec].Nodes.Add(deger2);
    }
    else if (seviye == 1)
    {

    treeView1.Nodes[treeView1.SelectedNode.Parent.Index].Nodes[sec].Nodes.Add(deger2);
    }
    else if (seviye == 2)
    {
    treeView1.Nodes[treeView1.SelectedNode.Parent.Parent.Index].Nodes[treeView1.SelectedNode.Parent.Index].Nodes[sec].Nodes.Add(deger2);
    }

    tekrar teşekkürler, kolay gelsin.

    YanıtlaSil
  4. Sorunu çözdüğüne sevindim. Şimdi ne yapmak istediğini daha iyi anladım. Örnek uygulama yardımcı olduysa güzel...

    YanıtlaSil
  5. iyi günler, tekrar treeview hakkında bir sorum olacaktı. iki formum var form1 de treeview nesnesi bulunuyor, form2 de form1 e bağlı. istediğim şey form1 de ki treeview de eklenmiş olan node lardan hangisi seçili ise form2 de bulunan label da bu seçili node nin ismi görünsün. ben şu şekilde yaptım.
    form1 de
    private void menüEkleToolStripMenuItem_Click(object sender, EventArgs e)
    {
    Form2 frm2git = new Form2();
    frm2git.ShowDialog();
    textBox1.Text = frm2git.textBox1.Text;
    }
    daha sonra form2 de
    private void Form2_Load(object sender, EventArgs e)
    {
    Form1 frm1git = new Form1();
    string kelime = frm1git.treeView1.SelectedNode.Text;
    }

    burada selectednode kodunda nesne başvurusu bir nesne örneği ayarlanmadı hatası çıkıyor, çözümü için yardımcı olur musunuz?

    YanıtlaSil
  6. yaptığın hata yeni bir form oluşturup daha önce oluşturulan formdaki nesneyi kullanmaya çalışıyorsun.

    Form2 de form1 deki bir nesneneyi(senin kodunda treeview nesnesi) kullanmak için değişik yöntemler var. birincisi form1 ve treview nesnesini public yapıp form2 nesnesini form1 nesnesinden açarak treeview nesnesini form2 aktarmak.Ama bu işlem ile iki form açıkken işlem yaparsan hiçbir değişiklik görmezsin. Çünkü Kontrolü devamlı form2 de senin yapmam gerekir.

    2. yöntem event delegate kullanarak seçili nodu anında 2. formda herhangi bir nesneya atayabilirsin. Bunu sanırsam daha önce yazmıştım.(sayfada "event delegate" olarak aratırsan örnek kodlar bulabilirsin)

    Diger bir yöntemde form application lar kullanılan ama benim kullanmayı sevmediğim bir yöntem


    Form1 frm1git = (Form1)Application.OpenForms["Form1"]
    string kelime = frm1git.treeView1.SelectedNode.Text;

    bunu kullanabilirsin.



    YanıtlaSil
  7. siz pek sevmiyormuşsunuz ama en son yöntem işime yaradı çok teşekkür ederim

    YanıtlaSil
  8. Aynen öyle. İşe yarayan bir yöntem. Ama api dll user control gibi nesneye yönelik yazılımlar için hiç kullanışlı bir değil. Aslında Form kullananlar için kolay ama ben yine de formlar arası işlemlerde dinamik olarak event delegate i tavsiye ederim :D

    YanıtlaSil
  9. biliyorum fazla başınızı ağrıttım ama bir konuda daha yardımınızı isteyecektim. projemdeki treeviewe verileri kaydettim fakat tekrar çalıştırdığım zaman treeviewın bir node'si kendinden seçili olarak çalışmıyor. ben üzerine tıklayınca seçili olmuş oluyor. bu neden olabilir, herhangi bir özelliği kapalı mıdır acaba?

    YanıtlaSil
  10. Tam olarak sorununu anlayamadım. Node seçimi ile ilgili olarak şunları söyleyebilirim.

    treeView.SelectedNode = treeView.Nodes[0].Nodes[1] ;


    şeklinde seçili nodu belirleyebilirsin.


    .Node[...] ekleyerek daha alt nodeları seçebilirsin.


    treeView.SelectedNode = treeView.Nodes[0].Nodes[1].Node[...].Node[...].Node[...]... ;

    Programı tekrar başlattığında, yukarıdaki satırı kullanarak daha alttaki node ları seçebilirsin.

    bunu kullanırken şuna dikkat etmelisin seçim yapmadan önce bu node treview a eklenmiş olmalıdır

    YanıtlaSil
  11. Merhaba,

    Forma toolboxtan bir adet treeview ekledim.

    Burda menü oluşturdum ve bu menülerden formlara geçmek istiyorum.

    Mesela Rapor1 e tıkladığımda Form2 açılsın istiyorum. Ama yapamadım.

    Yardımcı olursanız sevinirim.

    Görüntü linkte.
    https://social.msdn.microsoft.com/Forums/getfile/686393

    Teşekkürler.

    YanıtlaSil
    Yanıtlar
    1. Treeview1 isminde bir treview ekledim forma. Form2 formunuda oluşturduktan sonra, treeView1_AfterSelect
      olayını oluşturmalısını bunu form design sayfasında treeview üzerine çift tıklayarak yapabilirsin.
      Sonra hangi node seçilmiş ise onun ile ilgili işlemi de if ile tıklanan node kontrolü yaparak aşağıdaki gibi
      yapabilirsin. İlgili Node un ismi mesela Node1 olsun. Node1 seçildiğinde veya tıkladığında istenile işlemler yapılacak. Burada sen form2 göstermek istiyorsun. Bunun için de Form2 nesnesini bir örneğini alıp bunun show fonksiyonunu kullanarak form2 i göstermiş olursun.



      private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
      {
      if (treeView1.SelectedNode.Text == "Node1")
      {
      Form2 form2 = new Form2();
      form2.Show();
      }
      }

      Sil
  12. Cevabınız için teşekkür ederim.
    Sakınca olmazsa mail adresinizi alabilir miyim?
    Başka bir konuyla alakalı bir soru soracağım.

    YanıtlaSil
    Yanıtlar
    1. Komut cümleciğini if kullanarak seçilen duruma göre değiştirebilirsin

      private void btnAra_Click(object sender, EventArgs e)
      {
      string donustur = dateTimePicker1.Value.ToString("yyyy-MM-dd HH:mm:ss.FFF");
      string donustur2 = dateTimePicker2.Value.ToString("yyyy-MM-dd HH:mm:ss.FFF");
      SqlConnection con = new SqlConnection("Data Source=FARUKPC; Initial Catalog=MikroDB_V15_HSP; User Id=sa; password=2324448585;");
      con.Open();
      SqlCommand cmd = new SqlCommand();
      cmd.Connection = con;

      if (comboBox1.SelectedIndex == 0)
      {
      cmd.CommandText = "select * from STOK_HAREKETLERI where sth_tarih between @Tarih1 and @Tarih2 and sth_stok_kod like @Kriter+'%'";
      }
      else
      {
      cmd.CommandText = "select * from STOK_HAREKETLERI where sth_tarih between @Tarih1 and @Tarih2 and sth_stok_kod like '%'+ @Kriter+'%'";
      }
      cmd.CommandType = CommandType.Text;
      cmd.Parameters.AddWithValue("@Tarih1", donustur);
      cmd.Parameters.AddWithValue("@Tarih2", donustur2);
      cmd.Parameters.AddWithValue("@Kriter", txtAra.Text);
      SqlDataAdapter da = new SqlDataAdapter();
      da.SelectCommand = cmd;
      DataSet ds = new DataSet();
      da.Fill(ds);
      dataGridView1.DataSource = ds.Tables[0];
      con.Close();
      }

      Sil