C# Panele Kontrol Ekleme-Silme
-
Label txt = new Label()
{
Left = Convert.ToInt32(xBox.Text),
Top = Convert.ToInt32(yBox.Text),
Name = string.Concat("lbl", adBox.Text),
Visible = true,
Text = adBox.Text
};
panel.Controls.Add(txt);Daha önce euler ödevimle ilgili konu açmıştım. Javada yeni olmam ve javanın c# kadar sarmaması yüzünden ödevi c#la yapmaya karar verdim. Aslında hazır bi projeyi editleyecektim ama çok uğraştırcak diye vazgeçtim başladım kendim yapmaya, tam dedim herhangi bir çizim yaptırmadan halledeyim gitsin diye sonra bi anda nöronlarımda hareketlenmeler falan sonuç;
panel üzerine yukarıdaki kod ile label ekliyorum hiiç yormuyorum kendimi çizimlerle falan. Köşeleri şimdilik sadece comboboxlarda tutuyorum,combobox işlemlerinde sorun yok,birde matrixe aktarmam gerekicek sanırım bağları oluştururken o kadar. Sorunum şu;
panel kontrollerini Remove, RemoveAt, RemoveByKey metodlarıyla sildirebiliyoruz ama ben bir türlü beceremedim.
RemoveAt ile index numarasına göre denedim,oluyor ancak itemin comboboxtaki index numarası ile panel üzerindeki index numarası tutmayabiliyor; comboboxtan seçili itemi silerken panel üzerinden yanlış labeli siliyor.
RemoveByKey("lbl"+combobox.selectedvalue) gibi combobox'ın farklı değerlerini denedim yine olmadı. Remove'u kullanamadım...
gece gece kafam çalışmıyor, panel üzerinden kontrolleri isme göre nasıl sildiricem?
-
Araştırdım RemoveByKey metodu isme göre sildiriyomuş ama ben bir türlü yapamadım bunu :/
panel.Controls.RemoveByKey("lbl" + adBox.Text);
diyince textboxa silinecek vertex adı yazıldığında siliyor panelden ama combobox daha pratik. comboBox3.SelectedValue falan deniyorum deniyorum olmuyor birtürlü.
-
sileceğin kontrolün adını biliyor olman gerekiyor. eğer kontrolleri sen dinamik eklediysen peryodik isimler ver ve sonradan kontrol edebilir halde ol.
o zaman şu kod işini görür:
foreach (Control c in Panel1.Controls.Find("cnt" + s, false)) { if (c.GetType().Name.ToString() == "ComboBox") { ComboBox cmb = (ComboBox)c; if (cmb.Tag.ToString() == "cmbMarka") { Panel1.Controls.Remove(c); } } if (c.GetType().Name.ToString() == "TextBox") { TextBox txt= (TextBox)c; if (txt.Tag.ToString() == "txtMarka") { Panel1.Controls.Remove(c); } } }ben herhangi bir problem yaşamıyorum. 2000 farklı ürünün 20 kalem farklı bilgisini dinamik kontrol ekleyerek aldırıyorum programda:)
bişey olursa yaz burdan:)
-
uplayalim :D
-
EDİT:
string cntrl = "lbl" + comboBox3.SelectedItem.ToString();
şeklinde bir değişken tanımladım, panel.Controls.RemoveByKey(cntrl);
yapınca sorun halloldu :) yardımların için çok sağol manglerman :)
-
wasd bunu yazdı:
-----------------------------EDİT:
string cntrl = "lbl" + comboBox3.SelectedItem.ToString();
şeklinde bir değişken tanımladım, panel.Controls.RemoveByKey(cntrl);
yapınca sorun halloldu :) yardımların için çok sağol manglerman :)
-----------------------------reca ederiz:)
-
Yeni konu açmayayım burdan devam edeyim dedim :)
Projenin son durumu şu;
-Arayüz tamam,zaten 4 buton,3 textbox,3 combobox,3 label,bi tane de panel var :D panel büyük ya da küçük oldu muhabbetinin önüne geçmek için anchor kısmını değiştirdim görünümde sıkıntı kalmadı.
-Vertex ekleme silme butonları tamam, sadece bağ ekleme silmeyide yazdıktan sonra silinen vertexin bağlarını silmek için 2 satır daha eklemem gerekicek o kadar.
-bağ ekleme silme için matris mi kullansam veritabanımı haala onu düşünüyorum. Veritabanı eklersem ben buna bikaç bişey daha yaparım ama gerek yok gibime geliyor.
Şimdiii sorunum şu;
bağ eklemenin görselliğini sağlamak için VisualBasic powerpacklerinden lineShape kullanayım dedim ama bu meret c#'a ait olmadığı için farklı bi çalışma mantığı var, ve panel.Controls.add() şeklinde panele ekleyemiyorum. Ben bunu nasıl dinamik kullanabilirim? Ya da nasıl dinamik olarak çizgiler ekleyebilirim? Tabi her bir çizginin bir adı olması lazım sonradan sildirebilmek için?
EDİT: SORUNU ÇÖZDÜM; lineshape için bi container nesnesi oluşturmamız gerekiyo ve containerdan kalıtım almasını sağlamamız; bu şekilde line form üzerine çiziliyo. Daha sonra container nesnesinede oluşturduğum panelden kalıtım verdim panel üzerine çizimi gerçekleştirdim :) şimdi geriye bikaç ufak bakkal hesabı kaldı o kadar...
EDİT: Şimdi de şöyle birşey sorun oldu; ben bu çizgilerle 2 köşeyi bağlayacağım, eğer o iki köşeden biri silinirse bağ çizgiside silinmeli...o çizgilere ne isim vermeliyimki rahatlıkla sildirebileyim? ben "ln"+comboBox1.SelectedItem.ToString()+comboBox2.SelectedItem.ToString() şeklinde bir isim versem linelara, sildirmek için adının içinde comboBox3.SelectedItem.ToString() geçen "ln"+comboBox1.SelectedItem.ToString()+comboBox2.SelectedItem.ToString() isimli line'ı sildirebilirmiyim?
-
wasd bunu yazdı:
-----------------------------Yeni konu açmayayım burdan devam edeyim dedim :)
Projenin son durumu şu;
-Arayüz tamam,zaten 4 buton,3 textbox,3 combobox,3 label,bi tane de panel var :D panel büyük ya da küçük oldu muhabbetinin önüne geçmek için anchor kısmını değiştirdim görünümde sıkıntı kalmadı.
-Vertex ekleme silme butonları tamam, sadece bağ ekleme silmeyide yazdıktan sonra silinen vertexin bağlarını silmek için 2 satır daha eklemem gerekicek o kadar.
-bağ ekleme silme için matris mi kullansam veritabanımı haala onu düşünüyorum. Veritabanı eklersem ben buna bikaç bişey daha yaparım ama gerek yok gibime geliyor.
Şimdiii sorunum şu;
bağ eklemenin görselliğini sağlamak için VisualBasic powerpacklerinden lineShape kullanayım dedim ama bu meret c#'a ait olmadığı için farklı bi çalışma mantığı var, ve panel.Controls.add() şeklinde panele ekleyemiyorum. Ben bunu nasıl dinamik kullanabilirim? Ya da nasıl dinamik olarak çizgiler ekleyebilirim? Tabi her bir çizginin bir adı olması lazım sonradan sildirebilmek için?
EDİT: SORUNU ÇÖZDÜM; lineshape için bi container nesnesi oluşturmamız gerekiyo ve containerdan kalıtım almasını sağlamamız; bu şekilde line form üzerine çiziliyo. Daha sonra container nesnesinede oluşturduğum panelden kalıtım verdim panel üzerine çizimi gerçekleştirdim :) şimdi geriye bikaç ufak bakkal hesabı kaldı o kadar...
EDİT: Şimdi de şöyle birşey sorun oldu; ben bu çizgilerle 2 köşeyi bağlayacağım, eğer o iki köşeden biri silinirse bağ çizgiside silinmeli...o çizgilere ne isim vermeliyimki rahatlıkla sildirebileyim? ben "ln"+comboBox1.SelectedItem.ToString()+comboBox2.SelectedItem.ToString() şeklinde bir isim versem linelara, sildirmek için adının içinde comboBox3.SelectedItem.ToString() geçen "ln"+comboBox1.SelectedItem.ToString()+comboBox2.SelectedItem.ToString() isimli line'ı sildirebilirmiyim?
-----------------------------kendin yazıp kendin oynamışın maşallah :) ama en son problemine baktığım kadarıyla:
hiç bir problem olmaz. idsini bildiğin ve containsle içinde unic bir id olan ln leri silebilirsin.
bunu denemek daha kolaydır aslında 3-4 dakika da deneyebilirdin.
olmazsa yine haber et bende merak ettim şimdi :)
-
manglerman bunu yazdı:
-----------------------------kendin yazıp kendin oynamışın maşallah :) ama en son problemine baktığım kadarıyla:
hiç bir problem olmaz. idsini bildiğin ve containsle içinde unic bir id olan ln leri silebilirsin.
bunu denemek daha kolaydır aslında 3-4 dakika da deneyebilirdin.
olmazsa yine haber et bende merak ettim şimdi :)
-----------------------------yazdım çözdüm yazdım çözdüm ama kafam durdu sonra :D içerme kontrolünü kullanmam gerektiğini hatırladım(Mesela javada string karşılaştırma == şeklinde yapılmıyor sadece Contains ile oluyor) ama takıldım kaldım,zaten uyuyakalmışım sonra.. neyse bi dışarı çıkayım gelince hallederim,parasızlıktan açlıktan nefesim kokuyor :D bi para çekip kahvaltı edeyim editlerim bu mesajı :)
