/// <summary>
        /// get the value for the specified property. If the property does not exist, get default value
        /// without creating the property object
        /// </summary>
        /// <param name="control"></param>
        /// <param name="propId"></param>
        /// <param name="isDefaultValue"></param>
        /// <returns></returns>
        private static string GetRuntimeValueAsString(MgControlBase control, int propId, ref bool isDefaultValue)
        {
            Property prop = null;

            if (!control.PropertyExists(propId))
            {
                isDefaultValue = true;
            }
            else
            {
                prop = control.getProp(propId);
            }

            return(prop != null?prop.getValue() : string.Empty);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="control"></param>
        /// <param name="properties"></param>
        static void BuildVisibleProperty(MgControlBase control, Dictionary <string, DesignerPropertyInfo> properties)
        {
            bool isDefaultvalue = false;
            bool value          = true;
            bool runtimeValue   = true;

            // value is always "true", unless defined otherwise in previous runtime designer executions
            if (control.PropertyExists(PropInterface.PROP_TYPE_VISIBLE))
            {
                Property prop = control.getProp(PropInterface.PROP_TYPE_VISIBLE);
                value        = !prop.IsDesignerValue();
                runtimeValue = GetRuntimeValueAsBool(control, PropInterface.PROP_TYPE_VISIBLE, ref isDefaultvalue);
            }
            properties.Add(Constants.WinPropVisible, new DesignerPropertyInfo()
            {
                VisibleInPropertyGrid = false, Value = value, IsDefaultValue = false, IsNativeProperty = false, RuntimeValue = runtimeValue
            });
        }