1

MainPage.xaml'de btn1, btn2, btn3, ... ... btn20 adlı 20 düğme denetimi vardır. Şimdi bu düğmeleri arkadaki kodda kullanmam gerekiyor.Dizgiyi Control name C# wp8.1'e dönüştürme

Bir for döngüsü kullanmayı ve her düğme için kodu yapmayı planlıyorum. Ama benim sorunum dize Düğme ismine dönüştüremiyorum. Örneğin

,

for (int i = 1; i <=20; i++) 
{ 
    string button = "btn" + i; 

    // Convert string to button somehow 
    // Do something with button 
} 

Ben Google'da arama yaptıktan ve ipten kontrol adının dönüşümü hakkında makalelerin bol. Ama onlar Windows Forms için. Windows telefon uygulamaları bu ad alanlarını desteklemiyor.

+0

bulundu sahiptir Izgara elemanının adıdır adını kontrol etmek için dize dönüştürme ile ne anlama geliyor? İsmini bilen bir kontrol sınıfını mı kastediyorsun? Örneğin, 'TextBox'? –

+0

Sorumu düzenledim. Bak, –

+0

Ah, anlıyorum. Şu anda bu bağlamda –

cevap

2

Bu

gibi yapabilirsiniz: bir sözlük düğmelerini arama için
for (int i = 1; i <=20; i++) 
{ 
     Button ele = (Button) MainGrid.FindName("btn"+i); 
} 

İşte MainGrid düğme kontrolleri

+0

Cevabınız için teşekkürler. Neredeyse% 90 doğru. Ama bir çizgiyi kaçırdın. –

+0

@ShahriarSirajSnigdho Kendi otomatik yanıtınızda söylediğim gibi, Archana'yı kendi yanıtını nasıl geliştireceğine işaret etmelisiniz ve BTW, bu cevapta yanlış bir şey yok. Sadece sana ipucu verdi. '' '' Ve sonra '' 'kullanarak nesne iki kez döküm, sağ, ama benim için bu cevap doğru olarak düşünmek için yeterli değil ......... –

+0

Sadece yazdım" " şart. Eğer senin düğme elemanından emin olursan o zaman bu çizgiyi kaldırabilirsiniz – Archana

1

Sen düğme örneğine bir dize dönüştürmez ama sen yansıma kullanılarak btnN (fe btn1) sınıf alan değerini almak gerekir:

Button button = (Button)GetType().GetField($"btn{i}", BindingFlags.Instance).GetValue(this); 

Hatta bir daha verimli bir yol: Kullanım

// Place this in your form constructor 
Dictionary<string, Button> buttons = new Dictionary<string, Button> 
{ 
    { "btn1", btn1 }, 
    { "btnN", btn2 } 
}; 

// and later where you want to get your buttons by their name... 
Button btn1 = buttons[$"btn{i}"]; 
+0

GetField ve BindingFlags sorunu olmadığını anlıyorum :( –

+0

@ShahriarSirajSnigdho Gerçekten?;) GetType(). GetField() 'veya' GetField() 'yi mi çağırdınız? Ve BindingFlags bir 'System.Reflection' ad alanının bir üyesidir ... tüm alan adına –

+0

@ShahriarSirajSnigdho BTW kullanarak bir ekleme ekleyin, neden 2. yaklaşım ile gitmiyorsunuz? Sözlüğü kullanan kişi. Verimlilik açısından yansımadan daha iyidir –

0

Sonunda bir çözüm

for (int i = 1; i <= 20; i++) 
     { 
      var ele = GridMain.FindName("btn" + i); 

      // @Archana you missed this line 
      Button button = ele as Button; 

      // Do what you want to do with your control 
      button.Background = background; 
      button.Foreground = foreground;     
     } 
+3

BTW'de yoktu, otomatik cevabınızı dürüst bulmuyorum. Bırakın ve Archana'yı doğru bir işaret olarak işaretlemelisiniz. Eğer size doğru çözümü verdiyse –

+0

Elbette! @ matías-fidemraizer –

+0

Doğrudan FindName değerini Button tipine atayabilirsiniz. Ekstra satır gerek yok (Düğme düğmesi = Düğme olarak ele alın) – Archana