Winforms y DesignMode

Hoy, día en que se cortó la luz la mayor parte del tiempo, aparentemente me hice un ratito para trabajar un poquito en net.

Descubrí que no siempre el atributo DesignMode funciona como se piensa, asi que lo que esperaba fuera un problemita simple y rapido de solucionar, resulto en una invetigación en internet de como hacer mi propio DesignMode que sea confiable.

Aparentemene el problema se debe a que DesignMode solo informa si el control/formulario que se esta editando actualmente esta en tiempo de diseño, pero si es parte de una herencia, y es el padre el que necesita el DesignMode, a este le dice que no esta en diseño (lo cual es entre comillas cierto, ya que no es el padre el que se esta editando, sino el hijo pero genera conflictos y exceptions igual)

En fin, en internet encontré varias formas, tal vez todas igual de válidas y efectivas, pero al fin y al cabo la que yo implementé (lo cual no significa que sea la mejor) es la que figura en el blog de Derik Whittaker

Este método consiste en definir un nuevo método llamado IsInDesignMode (que yo agregé a una clase propia de la cual heredan todos mis formularios) que realiza dos checkeos para determinar si estamos en la IDE o no.

El primer chequeo consiste en el clásico Designtime, si este retorna false, hace el segundo chequeo (si ya este retornó true no hace falta) El segundo chequeo es ver cual es el nombre del proceso que se está ejecutando. Si es DEVENV estamos dentro de la IDE, por lo tanto en tiempo de diseño.

Copio aquí el código, pero para mayores referencias aconsejo ver su blog

public static bool IsInDesignMode()
{
	bool returnFlag = false;
#if DEBUG
	if ( System.ComponentModel.LicenseManager.UsageMode ==
		System.ComponentModel.LicenseUsageMode.Designtime )
	{
		returnFlag = true;
	}
	else if ( Process.GetCurrentProcess().ProcessName.ToUpper().Equals( "DEVENV" ) )
	{
		returnFlag = true;
	}
#endif
	return returnFlag;
}
Compartilo si te parece interesante!
Twitter Pinterest Stumbleupon Plusone Email


Discussion Area - Leave a Comment





+ seven = 10

Social links powered by Ecreative Internet Marketing