none
C# form kullanımı RRS feed

  • Soru

  • Merhaba,

    Bende C# ve VS kullanmaya hevesli bir şekilde yeni başladım.İnternetten biraz araştırma yaparak başlangıç için söyle basit bir stok programı yapayım dedim.. Amma velakin tahmin ettiğimden çok daha zormuş bu işler..5 günde alttaki kodlar kadar ilerleyebildim.

    C# da bilgi sahibi olanlara sormak istediğim bir soru var kodlarda görebileceğiniz gibi herşeyi tek bir formda yapmak istiyorum.Kendimce daha hızlı vs. olur diye düşünüyorum.. Acaba yanlış yoldamıyım ayrı formlarmı kullanmalıyım..

    Kodlar:

    namespace Stok_Takip
    {
        public partial class Form1 : Form
        {
            //[no] INTEGER PRIMARY KEY AUTOINCREMENT!!!!<--veri tabanına sıralı no ekleme...
            int sayac;
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Application.StartupPath + "\\stok.accdb");
            public Form1()
            {
                InitializeComponent();
            }
            //listeyi oluşturma
            public void liste_yapma()
            {
                string m = textBox1.Text;
                string k = textBox2.Text;
                string d = textBox3.Text;
                string ad1 = numericUpDown1.Value.ToString();
                string ad2 = numericUpDown2.Value.ToString();
                string ad3 = numericUpDown3.Value.ToString();
                string ad4 = numericUpDown4.Value.ToString();
                string ad5 = numericUpDown5.Value.ToString();
                string ad6 = numericUpDown6.Value.ToString();
                string ad7 = numericUpDown7.Value.ToString();
                string e1 = checkBox1.Text;
                string e2 = checkBox2.Text;
                string e3 = checkBox3.Text;
                string e4 = checkBox4.Text;
                string e5 = checkBox5.Text;
                string e6 = checkBox6.Text;
                string e7 = checkBox7.Text;
                if (checkBox1.Checked) { string[] bilgiler = { m, k, d, e1, ad1 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
                if (checkBox2.Checked) { string[] bilgiler = { m, k, d, e2, ad2 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
                if (checkBox3.Checked) { string[] bilgiler = { m, k, d, e3, ad3 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
                if (checkBox4.Checked) { string[] bilgiler = { m, k, d, e4, ad4 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
                if (checkBox5.Checked) { string[] bilgiler = { m, k, d, e5, ad5 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
                if (checkBox6.Checked) { string[] bilgiler = { m, k, d, e6, ad6 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
                if (checkBox7.Checked) { string[] bilgiler = { m, k, d, e7, ad7 }; listView1.Items.Add(new ListViewItem(bilgiler)); }
            }
    
            //aktarma buttonu
            private void button1_Click(object sender, EventArgs e)
            {
                bool contains = listBox1.Items.Cast<string>().Any(o => o.ToString().Equals(textBox1.Text, StringComparison.CurrentCultureIgnoreCase));
                if (textBox1.Text.Length==0 || textBox2.Text.Length==0 || textBox3.Text.Length == 0) { MessageBox.Show("Marka,Kalite veya Desen boş girilemez"); if (textBox1.Text.Length == 0) { textBox1.Focus(); } if (textBox2.Text.Length == 0) { textBox2.Focus(); } if (textBox3.Text.Length == 0) { textBox3.Focus(); } }
                else
                { 
                    //Ekli olan Markaya yeni tablo açılmasını engellemek için.. pfff sayaç 2
                    if (contains)
                    {
                        //MessageBox.Show("" + textBox1.Text + "  Markası Zaten Eklenmiş Stok Düzenleme Ekranına Geçmek İstermisiniz..","UYARI" ,MessageBoxButtons.YesNo,MessageBoxIcon.Question);
                        if(MessageBox.Show("" + textBox1.Text + "  Markası Zaten Eklenmiş Stok Düzenleme Ekranına Geçmek İstermisiniz..", "UYARI", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            listBox1.SelectedIndex = listBox1.FindStringExact(textBox1.Text);
                            textBox1.Enabled = false;
                            textBox2.Enabled = false;
                            textBox3.Enabled = false;
                            checkBox1.Enabled = false;
                            checkBox2.Enabled = false;
                            checkBox3.Enabled = false;
                            checkBox4.Enabled = false;
                            checkBox5.Enabled = false;
                            checkBox6.Enabled = false;
                            checkBox7.Enabled = false;
                            button2.Text = "Düzenle";
                            listView1.Clear();
                            sayac = 2;
                            tamlisteal();
                        }
                        else
                        {
                            textBox1.Clear();
                            textBox1.Focus();
                        }
    
                    }
                    //Tamamen Yeni Marka oluşturma sayaç 1
                    else
                    {
                        liste_yapma();
                        textBox1.Enabled = false;
                        textBox3.Clear();
                        textBox3.Focus();
                        adet_temizle();
                        sayac = 1;
                    }
                }
            }
            //marka listesi
            public void markalar_al()
            {
                if (!Convert.ToBoolean(con.State)) { con.Open(); }
                OleDbCommand marka_al = new OleDbCommand("SELECT * FROM markalar", con);
                OleDbDataReader dr = marka_al.ExecuteReader();
                while (dr.Read())
                {
                    listBox1.Items.Add(dr["markalar"]);
                }
                con.Close();
    
            }
            public void tamlisteal()
            {
                
                try
                {
                    if (!Convert.ToBoolean(con.State)) { con.Open(); }
                    ListViewItem item = new ListViewItem();
                    OleDbCommand liste_doldur = new OleDbCommand("SELECT * FROM "+ textBox1.Text +"", con);
                    OleDbDataReader dr2 = liste_doldur.ExecuteReader();
                    listView1.Items.Clear();
                    listView2.Items.Clear();
                    
                    
                    while (dr2.Read())
                    {
                        
                        //burda kaldım!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        //hata "örenk" öğesi birden fazla yere eklenemez...
                        //sanırım sıralı no eklemediğim için oldu... pff
    
                        item = listView2.Items.Add(dr2.GetString(0));
                        item.SubItems.Add(dr2.GetString(1));
                        item.SubItems.Add(dr2.GetString(2));
                        item.SubItems.Add(dr2.GetString(3));
                        item.SubItems.Add(dr2.GetString(4));
                        //item.SubItems.Add(dr2.GetString(4));
                        listView2.Items.Add(item);
                        
                    }
    
    
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                markalar_al();
                if (System.Deployment.Application.ApplicationDeployment.CurrentDeployment.IsFirstRun)
                {
                    
                    if (!Convert.ToBoolean(con.State)) { con.Open(); }
                    OleDbCommand markaolustur = new OleDbCommand("Create Table markalar ([markalar] Text)", con);
                    markaolustur.ExecuteNonQuery();
                    con.Close();
                }
                markalar_al();
            }
    
    
    
     
            //ekle butonu
            private void button2_Click(object sender, EventArgs e)
            {
                    try
                    {
                        if (!Convert.ToBoolean(con.State)) { con.Open(); }
                        //sayaç 1 ise sıfırdan tablo olşutur markalara ekle...
                        if (sayac==1)
                        {
                            string markalar = textBox1.Text;
                            OleDbCommand tabloolustu = new OleDbCommand("Create Table " + textBox1.Text + "([marka] Text , [kalite] Text , [desen] Text , [ebat] Text, [adet] Text )", con);
                            OleDbCommand marka_at = new OleDbCommand("insert into markalar (markalar) values (@markalar)", con);
                            marka_at.Parameters.Add("@markalar", OleDbType.VarChar).Value = markalar;
                            marka_at.ExecuteNonQuery();
                            tabloolustu.ExecuteNonQuery();
                            for (int i = 0; i < listView1.Items.Count; i++)
                            {
                                string marka = listView1.Items[i].SubItems[0].Text;
                                string kalite = listView1.Items[i].SubItems[1].Text;
                                string desen = listView1.Items[i].SubItems[2].Text;
                                string ebat = listView1.Items[i].SubItems[3].Text;
                                string adet = listView1.Items[i].SubItems[4].Text;
                                OleDbCommand liste_at = new OleDbCommand("insert into " + textBox1.Text + " (marka,kalite,desen,ebat,adet) values (@marka,@kalite,@desen,@ebat,@adet)", con);
                                liste_at.Parameters.Add("@marka", OleDbType.VarChar).Value = marka;
                                liste_at.Parameters.Add("@kalite", OleDbType.VarChar).Value = kalite;
                                liste_at.Parameters.Add("@desen", OleDbType.VarChar).Value = desen;
                                liste_at.Parameters.Add("@ebat", OleDbType.VarChar).Value = ebat;
                                liste_at.Parameters.Add("@adet", OleDbType.VarChar).Value = adet;
                                if (!Convert.ToBoolean(con.State)) { con.Open(); }
                                liste_at.ExecuteNonQuery();
                                MessageBox.Show("" + textBox1.Text + " Markası Ve bütün liste başarıyla eklenmiştir.");
                                form_temizle();
                            }
                        }
    
                        //sayaç 2 ise tabloda düzenleme yap
                        if (sayac == 2)
                        {
                        
                        }
                        
    
                        
                    }
                    catch (Exception u)
                    {
                        MessageBox.Show(u.Message);
                    }
                    finally
                    {
                        if (!Convert.ToBoolean(con.State)) { con.Close(); }
                    }
            }
            
        }
    }

    Yorum,tavsiye veya eleştireliriniz için şimdiden teşekkürler. 

    Biraz uzun oldu kusuruma bakmayın..


    19 Şubat 2017 Pazar 11:38

Yanıtlar

  • Merhaba,

    Tüm işlemlerin aynı formda olması malesef kodun daha hızlı çalışmasına katkıda bulunmuyor. Aksine, tüm işlemlerin tek bir buton altında oluyor olması kafa karışıklığına ve hataya sebep verir.

    Mümkün olduğunda sadece tek bir işi yapan metotlara bölerseniz daha performanslı çalışabilirsiniz.

    26 Şubat 2017 Pazar 19:32

Tüm Yanıtlar

  • LİNQ To SQL öğren bence artı işlemlerini elinden geldiğince class içinde parça parça yap... buda benim görüşüm :=)

    19 Şubat 2017 Pazar 17:18
  • Merhaba,

    Tüm işlemlerin aynı formda olması malesef kodun daha hızlı çalışmasına katkıda bulunmuyor. Aksine, tüm işlemlerin tek bir buton altında oluyor olması kafa karışıklığına ve hataya sebep verir.

    Mümkün olduğunda sadece tek bir işi yapan metotlara bölerseniz daha performanslı çalışabilirsiniz.

    26 Şubat 2017 Pazar 19:32
  • Tamamen şahsi fikirlerimdir:

    Amacın bu işten para kazanmak değilse istediğin şeyi istediğin yere yaz. Çalıştığı sürece sıkıntı olmayacaktır.

    Yok bunu meslek olarak yapmak istiyorsan, öncelikle acele etmeden kod yazmayı, standartları,prensipler vs. öğrenmelisin. 

    26 Şubat 2017 Pazar 20:12
  • Eğer kodlamayı öğrenmek istiyorsan 

    1-Jeremy Bytes

    2-Pluralsight 

    bunların görsel eğitim setleri var internetten bulabilirsin Clean Code Writing (Temiz kod yazma) ile başlayıp devam edebilirsin. Kodlama yaparken ne kadar ufak parçaya bölebilirsen o kadar düzgün ve hızlı çalışıyormuş bende buradan öğrendim.

    26 Şubat 2017 Pazar 21:04
  • . Kodlama yaparken ne kadar ufak parçaya bölebilirsen o kadar düzgün ve hızlı çalışıyormuş bende buradan öğrendim

    Aksine yavaşlatırsın ve kodu böldün diye de bölünmemiş halinden düzgün çalışmaz. 

    Neden bölüyoruz peki? DRY ve SOLID gibi prensipler bunu gayet iyi açıklıyorlar. Kullanılan yöntemlerin hepsi bir soruna getirilmiş çözümler. Eğer sorunun ne olduğu iyi anlaşılırsa nerede ne kullanılacağı netleşir. 

    27 Şubat 2017 Pazartesi 06:45