Tengo muchos botones y tags en mi formulario c #. Tengo un botón que cambia las propiedades de texto de todos los botones y tags (botón de cambio de idioma). ¿Tengo que escribir todos los elementos en el clic del evento del botón o hay un método que escanea todos los elementos de control de formulario y cambia sus propiedades de texto?
Hay muchos otros controles que contienen tags o botones. Por ejemplo, se agrega una etiqueta al control de un panel y cuando itero los controles de formulario, no puedo acceder a esta etiqueta. Quiero cambiar las propiedades de texto de todos los elementos a la vez.
Gracias.
foreach (Control objCtrl in yourFormName.Controls) { if (objCtrl is Label) { // Assign Some Text } if (objCtrl is Button) { // Assign some text }
}
Si ocurre un error CS0120, cambie yourFormName.Controls
a this.Controls
;
Suponiendo que ASP.NET's
interfaz ITextControl
ASP.NET's
(funciona de manera similar para la Text-Property
ASP.NET's
ITextControl
-Controls):
var text = "Hello World"; var allTextControls = this.Controls.OfType(); foreach(ITextControl txt in allTextControls) txt.Text = text;
http://msdn.microsoft.com/en-us/library/bb360913.aspx
Edición : puede convertirla fácilmente en una extensión (por ejemplo, ASP.NET, para Winforms reemplazar ITextControl con Control):
public static class ControlExtensions { public static void SetControlChildText(this Control rootControl, String text, bool recursive) { var allChildTextControls = rootControl.Controls.OfType(); foreach (ITextControl txt in allChildTextControls) txt.Text = text; if (recursive) { foreach (Control child in rootControl.Controls) child.SetControlChildText(text, true); } } }
Ahora puedes llamarlo por ejemplo de esta manera:
protected void Page_Load(object sender, EventArgs e) { Page.SetControlChildText("Hello World", true); }
Esto aplicará el texto dado en cada control secundario que implemente ITextControl
(como Label o TextBox).
Si es winforms
, debería leer sobre la localizing
su aplicación aquí:
Tutorial: localización de formularios de Windows
Creo que si está utilizando javascript, simplemente puede ir a través del DOM y modificar los textos de los botones y las tags. Usando jQuery esto será muy simple.
Para una aplicación web, puedes hacer esto fácilmente con jQuery. Eche un vistazo a esto: http://api.jquery.com/category/selectors/
$('label').each(function(){this.value = 'something else';});
Para Winforms, puedes usar esto:
foreach (var c in Controls.OfType()) c.Text = "TextBox Text"; foreach (var c in Controls.OfType
Pero estoy de acuerdo con @ionden, deberías considerar localizar tu aplicación.
Hay una propiedad de Controls
que contiene todos los controles de su formulario. Puedes iterar sobre ello:
foreach(var control in Controls) { var button = control as Button; if(button != null) button.Text = Translate(button.Text); else { var label = control as Label; if(label != null) label .Text = Translate(label .Text); } }
foreach( Control ctlparent in this.Controls) { if(ctlparent is Panel or ctlparent is GroupBox) { foreach(Control ctl in ctlparent.Controls) { if(ctl is Label or ctl is Button) { ctl.Text= newtext; } }}
Esto funcionará.