示例#1
0
        private void CloseClone(object sender, CloningEventArgs e)
        {
            f0t0page page = sender as f0t0page;

            if (page != null)
            {
                page.ReAssemble();
                page.IsCloned = false;
                page.UpdateText(e.MainPictureName);
                page.fotobox.UpdateAll();
            }
        }
示例#2
0
        private void InitClone(object sender, CloningEventArgs e)
        {
            f0t0page page = sender as f0t0page;

            if (page != null)
            {
                //Thread.Sleep(200); //wait a few millsecs for stuff.
                this.splitContainer.SplitterDistance = this.splitContainer.Parent.Width;
                page.IsCloned = true;
                page.fotobox.UpdateAll();
                page.UpdateText(e.MainPictureName);
                page.Retract();
            }
        }
示例#3
0
    public static object Clone(Type sourceType, object source, Type cloneType, EventHandler <CloningEventArgs> cloning, object sender = null)
    {
        if (cloneType == null)
        {
            cloneType = sourceType;
        }

        var clone = Activator.CreateInstance(cloneType);

        string clonePrimarykeyName = null;

        try
        {
            clonePrimarykeyName = GetSqlPrimaryKeyName(cloneType);
        }
        catch (MissingSqlPrimaryKeyAttributeException) { }

        var fieldNamingType = GetSqlFieldNamingType(cloneType);

        Func <PropertyInfo, bool> piFunc = x =>
        {
            if (!x.CanWrite || !x.CanRead)
            {
                return(false);
            }

            if (x.HasCustomAttribute <IgnoreAttribute>())
            {
                return(false);
            }

            if (clonePrimarykeyName != null)
            {
                var name = GetFieldName(x, fieldNamingType);

                if (name == clonePrimarykeyName)
                {
                    return(false);
                }
            }

            return(true);
        };

        var sourceProperties = sourceType.GetProperties().Where(piFunc).ToArray();
        var cloneProperties  = cloneType != sourceType?cloneType.GetProperties().Where(piFunc).ToArray() : sourceProperties;

        foreach (var sourcePi in sourceProperties)
        {
            var clonePi = cloneProperties.SingleOrDefault(x => x.Name == sourcePi.Name);
            if (clonePi != null)
            {
                clonePi.SetValue(clone, sourcePi.GetValue(source, null), null);
            }
        }

        var sourceFields = sourceType.GetFields(BindingFlags.Public | BindingFlags.Instance);
        var cloneFields  = cloneType != sourceType?sourceType.GetFields(BindingFlags.Public | BindingFlags.Instance) : sourceFields;

        foreach (var sourceField in sourceFields)
        {
            var cloneField = cloneFields.SingleOrDefault(x => x.Name == sourceField.Name);
            if (cloneField != null)
            {
                cloneField.SetValue(clone, sourceField.GetValue(source));
            }
        }

        var e = new CloningEventArgs(sourceType, source, cloneType, clone);

        if (Cloning != null)
        {
            Cloning(sender, e);
        }

        if (cloning != null)
        {
            cloning(sender, e);
        }

        return(clone);
    }