1

Scenario

I am creating a custom panel in which resides another panel named pnlInner.

Trying to achieve

In Designer page, I want whenever i try to drag and drop any control into my MaterialPanel, it directly gets added to my pnlInner of MaterialPanel instead of the MaterialPanel

Here is the code below: -

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
using System.ComponentModel.Design;

namespace MaterialUI_Control
{
    public partial class MaterialPanel : Panel
    {
        bool LoadingPanel = false;
        Panel pnlInner = new Panel();
        public MaterialPanel()
        {
            LoadingPanel = true;
            InitializeComponent();

            this.Padding = new Padding(10, 10, 10, 10);

            pnlInner.Name = "pnlInner";
            pnlInner.Dock = DockStyle.Fill;
            pnlInner.BackColor = this.BackColor;
            this.Controls.Add(pnlInner);

            LoadingPanel = false;
        }

        protected override void OnControlAdded(ControlEventArgs e)
        {
            if (LoadingPanel == true)
            {
                base.OnControlAdded(e);
            }
            else
            {
                //base.OnControlAdded(e);

                /*Solutions tried here*/
            }
        }
    }
}

Code Explanation

  1. Reason for using padding - Because i want another panel to appear at 10px difference from the original panel where all the controls must be added.
  2. LoadingPanel flag - Used because when adding pnlInner the base.OnControlAdded(e); code should work.

Solution that I tried

  1. e.Control.Parent = pnlInner; didn't work; whenever i try to drag the control into my MaterialPanel, it just goes back to where it used to be.
  2. pnlInner.Controls.Add(e.Control); didn't work; same bounce back effect.
  3. e.Control.Parent.Controls.Remove(e.Control); pnlInner.Controls.Add(e.Control); still the same
  4. e.Control.Parent = null; pnlInner.Controls.Add(e.Control); still nothing
Agent_Spock
  • 1,107
  • 2
  • 16
  • 44
  • 1
    Are you looking for something like this? [UserControl with header and content - Allow dropping controls in content panel and Prevent dropping controls in header at design time](https://stackoverflow.com/a/50772584/3110834) – Reza Aghaei Jan 03 '20 at 05:32

0 Answers0