Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > c# mastermind
Yazar
fairy


avatar

Kayıt: 04.03.2006
08.05.2006-12:14 #6543
selam
delphi de yaptığım bi projede buttonlarımı şu şekilde kontrol edebiliyordum
TButton(findcomponent('Button'+inttostr(i)))
bu kontrolun C# da bir kullanım var mı biliyor musunuz?
teşekkürler





Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
08.05.2006-19:19 #6549
Merhabalar,
Bana yazdiginiz o kodun ne is yaptigini aciklayabilirseniz size yardımcı olabilirim. Ancak yazdıgınız delphi kodunun ne is yaptıgını çözemedim, delphi konusu ile hiç alakam yok. Kod ne is yapıyor yani butonu kontrol etmekten kastınız nedir?





Yazar
fairy


avatar

Kayıt: 04.03.2006
08.05.2006-22:56 #6554
selam tarık bey,
yazdığım kodun işlevini şöyle kısaca anlatayım:
10 tane buttonum var diyelim. 10 tanesininde ismini değiştirmek istiyorum diyelim
bir döngü içine sadece bu kodu yazarak 10 tanesine birden isim verebiliyorum
umarım açıklayıcı olabilmişimdir.





Yazar
cantur


avatar
Rize
admin
Kayıt: 16.01.2006
08.05.2006-23:32 #6559
selamlar

Tarık cevap yazar diye bekledim ama Yoğun bu aralar :)

İstediğini şöle yapabilirsin. Direk buttonları içeren Formun load yordamını yapıştırıyorum...

private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i < 6; i++)
{
((Button)this.Controls["button" + i]).Text = "CanTur";
}
}

Tüm butonlarımın üzerine "CanTur" yazdırdım.
Yakaladığın button daha sonra kullanabilmek için şu şekilde bir işaretçiye de saklayabilirsin.

System.Windows.Forms.Button ButtonTutucu;
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i < 6; i++)
{
ButtonTutucu = ((Button)this.Controls["button" + i]);
ButtonTutucu.Text = "CanTur";
}
}

kolay gele.





Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
09.05.2006-00:18 #6565
Evet Ozgur un(sagolsun anlatmıs:)) ) de dedigi gibi C# ta bir forma yerlestirdiginiz button, checkbox,textbox, vs... seklindeki kontroller o forma ait Controls isminde bir container icerisine yerlestirilir. Siz bu container icerisinde Ozgurunde yaptigi gibi [] operatorunu kullanarak istediginiz kontrolu yakalayabilir ve uzerinde istediginiz islemleri yapabilirsiniz. Iyi gunler...






Yazar
fairy


avatar

Kayıt: 04.03.2006
09.05.2006-18:18 #6594
selam cantur bey
ben sizin vermiş olduğunuz kodları denedim güzelde çalıştılar ama gel gör ki kendi programımda deniyorum aynı kodlar hiç abartmıyorum tıpa tıp aynısı
Object reference not set to an instance of an object. diye bi hata veriyor

private void evet_Click(object sender, EventArgs e)
{

if (ds.Tables[0].Rows[dizi[a]][6].ToString() == Convert.ToString(cevap))
{
label17.Text = "Doğru cevap";
j = j + 1;

for (int i = 2; i < 18; i++)
{


((Label)this.Controls["label" + k]).ForeColor = Color.AliceBlue;
System.Threading.Thread.Sleep(100);

}
}
else label17.Text = "yanlış cevap";

}
aynı kodları yeni bir projede deniyorum çalışıyor benim projemin sucu nedir anlamadım:D






Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
09.05.2006-18:50 #6598
Merhabalar,
yapıstırdıgınız kod direkt projenizdeki kod mu yoksa incelemek acısındanmı yapıstırdınız bilemiyorum ancak direkt projedeki kodunuz ise asagida for dongusu icerisinde dongu degiskeni olarak 2 den baslamaka uzere i degiskenini kullanmıssınız, ancak Controls["label"+k] diye k degiskenini yazmıssınız. Probleminiz bu olabilir mi?

private void evet_Click(object sender, EventArgs e)
{
        if (ds.Tables[0].Rows[dizi[a]][6].ToString() == Convert.ToString(cevap))
       {
               label17.Text = "Doğru cevap";
               j = j + 1;
               for (int i = 2; i < 18; i++)
              {
                    
 
((Label)this.Controls["label" + k]).ForeColor = Color.AliceBlue;
} } else label17.Text = "yanlış cevap"; }


Bi de label2, label3, label4,.....,label17 olmak uzere hepsi tanimli labeller degil mi? Yani arada bir tanesini unutmussanız derleyici onu bulamayacaktır. Iyi gunler...





Yazar
fairy


avatar

Kayıt: 04.03.2006
09.05.2006-22:02 #6611
onu ekleme çıkarma yaparken yanlışlık yapışım sorun onda değil ayrıca hepsi sıra ile label 2 den 16 ya kadar hepsi de tanımlı yarın ödevi teslim etmem gerkiyor ve sadece burada sorun var bu labellerın hepsini sırayla 1 saniyelik aralıklarla rengini değiştirmek istiyorum





Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
09.05.2006-23:57 #6621
Merhabalar,
sorunuzu goremedim Aliye yi izliodumbiggrin
En iyisi siz benim asagida yazdigim yeni kodu deneyin, daha stabil olacaktir;
ASagidaki kodda tum kontrolleri geziyorum, gezerken yakaladıgım kontrol LAbel mi yoksa TextBox, Button vs. mi onları kontrol ediyor labelse islemime devam ediyorum. Ancak yakaladıgım tum labellerin rengini degistirmek istemeyebilirim, formda baska labellerde ornegin lblKullaniciAdi vs. gibi olabilir ve bunların rengini degistirmek istemeyebiliriz. Bu durumda biz biliyoruzki rengini degistirecegimiz labeller label2, label3, label4 ,... vs seklinde nesne adi olarak "label" kelimesi ile basliyor. Iste yakaladıgım labellerin name ozelliklerine Substring yapıp "label" ile baslayip baslamadigina bakiyorum. Ok ise aradigim labellerden birini bulmusum ve gerekli renk ve isim degistirmeyi yapıyorum. Ancak burada onemli olan husus try-catch blogu. Siz 5 karakterden daha az harfli bir label girmis olabilirsiniz ornegin lbl4 diye bir labeliniz var, ben bunu yakalayıp Substring ile ilk 5 karakterini almaya calısınca kod patlar ama bu try-catch blogu bu hata olussa bile goz ardı eder ve diger kontrolleri arayarak islemine devam eder. O amacla yazılmıstır. Benden size tavsiye patlama olayı renk degistirmeyi biraz yavaslattıgından dolayı, siz 5 karakterden daha kısa label adları vermeyin formunuzda hic bir zaman catch e dusmesin; Kod asagidadir, iyi geceler;

		private void btnChangeColor_Click(object sender, System.EventArgs e)
		{
			//Asagidaki for dongusu form uzerindeki tum kontolleri doner
			for(int i = 0; i < this.Controls.Count; i++)
			{ 
				//bu try catch blogu Name ozelligine sunstring yapip ilk 5 karakterini almaya 
                        	//calisirken daha kisa name e sahip kontoller cikip hataya 
                                //neden olursa akisi kesmemek icin
				try  
				{
                                             // kontrol label mi yoksa button ya da textbox vs. mi?
					if(this.Controls[i] is Label)  
						if(this.Controls[i].Name.Substring(0,5) == "label" )
                                                                   //kontrol adi label ile mi basliyor
						{
                                                         //label oldugunu ve "label" basladigini biliyoruz
							((Label)this.Controls[i]).Text = "TARIK";	
							((Label)this.Controls[i]).ForeColor = Color.Blue;
						}
				}
				catch(System.Exception ex)
				{
                                        // Yukarida gorundugu gibi Substring(0,5) yapip ilk 5 karakteri 
                                        // alirken daha kisa isimli ornegin
					// btn2 gibi bir kontrole rastlanirsa olusan hatayi yakalar ve bos gecer 
				}								
			}
		}






Yazar
fairy


avatar

Kayıt: 04.03.2006
10.05.2006-13:18 #6636
sonunda yaptım bu isim uzundan kaynaklanmıyormuş akşam eve gidince yaptığım şeyi göndereyim bir başka yolu da varmış onu da öğrendim
ben labelları panelin içine yerleştirdiğim için controls ile label leri tek tek kontrol edemiyor bir panelin bi nesnesi haline gelmiş oluyor
o yüzden this.control yerine panel.control yazmam gerekiyormuş bi uygulayım inşallah olur
ya ben bu hocaları seviyorum herkese böyle hocalar nasip olur
inşallah projeyi pazartesiye ertelemiş





Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
10.05.2006-15:32 #6637
Evet aynen o sekilde, eger panel gibi container ozelligi gosteren bir kontrol kulandıysanız, icine koydugunuz kontrolleri artık onun icinde arayacaksınızi Panel de formun kontrolleri listesine eklenmis olacak boyle iç içe bir yapı olusuyor yani.





Yazar
fairy


avatar

Kayıt: 04.03.2006
10.05.2006-22:28 #6652
public partial class Form1 : Form
{

int k = 1;
private void evet_Click(object sender, EventArgs e)
{


if (ds.Tables[0].Rows[dizi[a]][6].ToString() == Convert.ToString(cevap))
{
yenisoru.Visible = true;
label17.Text = "Doğru cevap";

for (int i = 1; i < 15; i++)
{
((Label)panel5.Controls["l" + i]).ForeColor = Color.Cyan;
}
for (int i = 0; i < panel5.Controls.Count; i++)
{
if (panel5.Controls[i] is Label && panel5.Controls[i].Name == "l" + k.ToString())
{
(panel5.Controls[i] as Label).ForeColor = Color.Red;
k++;
}
}
}
else { label17.Text = "yanlış cevap";
button1.Visible = true;
}


}

yukarıdaki kodların içindeki
for (int i = 1; i < 15; i++)
{
((Label)panel5.Controls["l" + i]).ForeColor = Color.Cyan;
}
kodları ile
for (int i = 0; i < panel5.Controls.Count; i++)
{
if (panel5.Controls[i] is Label && panel5.Controls[i].Name == "l" + k.ToString())
{
(panel5.Controls[i] as Label).ForeColor = Color.Red;
k++;
}
aynı işlevi görüyor sonunda oldu ve proje bitti herkese kolay gelsin arkadaşlar bilgileriniz için gerçekten sağolasınız







Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb