Obtener un control de Windows Forms por nombre en C#
Tengo un ToolStripMenuItem
llamado myMenu
. ¿Cómo puedo acceder a esto así?
/* Normally, I would do: */
this.myMenu... etc.
/* But how do I access it like this: */
String name = myMenu;
this.name...
Esto se debe a que estoy generando ToolStripMenuItems dinámicamente a partir de un archivo XML y necesito hacer referencia a los MenuItems por sus nombres generados dinámicamente.
Utilice el método Control.ControlCollection.Find .
Prueba esto:
this.Controls.Find()
string name = "the_name_you_know";
Control ctn = this.Controls[name];
ctn.Text = "Example...";
Suponiendo que tiene el menuStrip
objeto y el menú tiene solo un nivel de profundidad, use:
ToolStripMenuItem item = menuStrip.Items
.OfType<ToolStripMenuItem>()
.SelectMany(it => it.DropDownItems.OfType<ToolStripMenuItem>())
.SingleOrDefault(n => n.Name == "MyMenu");
Para niveles de menú más profundos, agregue más operadores SelectMany en la declaración.
Si desea buscar todos los elementos del menú en la franja, utilice
ToolStripMenuItem item = menuStrip.Items
.Find("MyMenu",true)
.OfType<ToolStripMenuItem>()
.Single();
Sin embargo, asegúrese de que cada menú tenga un nombre diferente para evitar excepciones generadas por duplicados de claves.
Para evitar excepciones, puede usar FirstOrDefault
en lugar de SingleOrDefault
/ Single
o simplemente devolver una secuencia si tiene Name
duplicados.