En iyi yanıtlayıcılar
C# form kullanımı

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..
- Düzenleyen Baybars Oğuz 19 Şubat 2017 Pazar 12:17
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.
- Yanıt Olarak Öneren A.M. Sabuncu 26 Şubat 2017 Pazar 19:35
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 2 Mart 2017 Perşembe 08:06
Tüm 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.
- Yanıt Olarak Öneren A.M. Sabuncu 26 Şubat 2017 Pazar 19:35
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 2 Mart 2017 Perşembe 08:06
-
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.
-
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.
-
. 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.