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
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.LoadingPanel flag
- Used because when addingpnlInner
thebase.OnControlAdded(e);
code should work.
Solution that I tried
e.Control.Parent = pnlInner;
didn't work; whenever i try to drag the control into myMaterialPanel
, it just goes back to where it used to be.pnlInner.Controls.Add(e.Control);
didn't work; same bounce back effect.e.Control.Parent.Controls.Remove(e.Control); pnlInner.Controls.Add(e.Control);
still the samee.Control.Parent = null; pnlInner.Controls.Add(e.Control);
still nothing