2016-04-08 25 views
1

Bir dize aracılığıyla bir denetim (isteğe göre) bulmak için özel bir uzantı yöntemim var ve bu denetim için bir tıklama gerçekleştirin. Bir mola noktası kurdum ve if (c is ToolStripMenuItem)'u içine aldım. Herkesin yanlış gittiğine dair bir fikrim var mı? Bu WinForms'da.Dize denetimini bulamıyor

private void PerformClickfromString() 
    { 
     string item = File.ReadAllText(@"C:\controltest.txt"); 

     foreach (var c in this.Controls) 
     { 
      if (c is ToolStripMenuItem) 
      { 
       var x = (ToolStripMenuItem)c; 

       if (x.Name == item) 
       { 
        x.PerformClick(); 
       } 
      } 
     } 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     PerformClickfromString(); 
    } 

Herhangi bir yardım için teşekkür ederiz.

+0

İç kontrolden önce bütün x.Adlarını yazdırabilirim ve hangi kontrollerin ulaştığını görüyorum. – TaW

cevap

1

kullanmalıdır. İşte bir örnek; List<ToolStripMenuItem>'daki tüm öğeleri ve aranan ismin kontrollerini toplar. Bu dizgeyi aramanızın imzasına ekledim ..:

private void PerformClickfromString(string s) 
{ 
    foreach (var c in this.Controls) 
    { 
     List<ToolStripMenuItem> items = new List<ToolStripMenuItem>(); 

     if (c is MenuStrip) 
     { 
      foreach (ToolStripMenuItem tsItem in ((MenuStrip)c).Items) 
      { 
       GetAllMenuItems(items, tsItem); 
      } 
     } 
     ToolStripMenuItem found = items.Find(x => x.Name == s); 
     if (found != null) found.PerformClick(); 
    } 
} 


void GetAllMenuItems(List<ToolStripMenuItem> items, ToolStripMenuItem menu) 
{ 
    items.Add(menu); 
    foreach(ToolStripMenuItem m in menu.DropDownItems) 
     GetAllMenuItems(items, m); 
} 
+0

Açıklama ve örnek için teşekkür ederiz! Mükemmel çalışıyor. – EyeSeeSharp

1

ToolStripMenuItem bir kontrol olarak kabul edilmez, bunun yerine bir özyinelemeli arama gereken tüm iç içe öğeleri bulmak için onun kabı

if(c is MenuStrip) 
{ 
    foreach(ToolStripMenuItem tsItem in ((MenuStrip)c).Items) 
    { 
     if (tsItem.Name == item) 
     { 
      tsItem.PerformClick(); 
     } 
    } 
} 
+0

Bunu denerken bu hatayı alıyorum: foreach deyimi, tür değişkenleri üzerinde çalışamaz ... 'GetEnumerator' – EyeSeeSharp

+0

için genel bir tanım içermiyor Yeni düzenlemeyi deneyin –

+0

'foreach deyimi,' System.Windows 'değişkenlerinde çalışamaz. Forms.MenuStrip 'Çünkü' GetEnumerator ' – EyeSeeSharp

İlgili konular