I wanted to create Custom ToolStripItem
that will have checkbox
and Icon in it.
I menage to do that by creating Custom Control with two picturebox
and label.
Left picturebox
if for icon and right is acting as special checkbox
to add position to favorites.
I added that control to ToolStripControlHost
.
- The problem is the white spaces on left and right I wan't to remove them or move icon to left bar and remove right space. I tried to set
Padding
andMargin
values to 0 but it doesn't work. I found post with similar problem but no were the correct answer. Is it possible to do that??
- I want to make whole line highlight on MouseEnter just like normal elements in ToolStripMenuItem. When I override OnMouseEnter and OnMouseLeave changing background proprieties it just change the color of hosted control not antirie ToolStripControlHost. Is it possible to simulate the same behavior as ToolStripMenuItem?
Right now it looks like Picture 'A' and I want it to look more like picture B but with star shape checkbox:
Basically i want to make My CustomToolStrip item as similar to ToolStripMenuItem as possible. With separate events for Click (if you click on text) and ChackChange (if you Click on star)
Any ideas how to do that?
That's part of My ToolStripControlHost Code:
private void AddEvents()
{
this.ToolStripICItemControl.eMouseEnter += new EventHandler(On_MouseEnter);
this.ToolStripICItemControl.eMouseLeave += new EventHandler(On_MouseLeave);
}
private void AutoSizeControl(Control control, int textPadding)
{
// Create a Graphics object for the Control.
Graphics g = control.CreateGraphics();
// Get the Size needed to accommodate the formatted Text.
Size preferredSize = g.MeasureString(
control.Text, control.Font).ToSize();
// Pad the text and resize the control.
this.Size = new Size(
preferredSize.Width + 5 + 50 + (textPadding * 2),
this.Size.Height /*+ (textPadding * 2)*/ );
// Clean up the Graphics object.
g.Dispose();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
}
protected override void OnSubscribeControlEvents(Control c)
{
// Call the base so the base events are connected.
base.OnSubscribeControlEvents(c);
// Cast the control to a ToolStripCheckBox control.
ToolStripImageAndCheckBox checkBoxToolStrip = (ToolStripImageAndCheckBox)c;
// Add the event.
checkBoxToolStrip.LabelClick += new EventHandler(checkBoxToolStrip_LabelClick);
checkBoxToolStrip.CheckedChanged += new EventHandler(checkBoxToolStrip_CheckedChanged);
}
protected override void OnUnsubscribeControlEvents(Control c)
{
// Call the base method so the basic events are unsubscribed.
base.OnUnsubscribeControlEvents(c);
// Cast the control to a ToolStripCheckBox control.
ToolStripImageAndCheckBox checkBoxToolStrip = (ToolStripImageAndCheckBox)c;
// Remove the event.
checkBoxToolStrip.LabelClick -= new EventHandler(checkBoxToolStrip_LabelClick);
}
protected override void OnMouseEnter(EventArgs e)
{
DefaultBackColor = this.BackColor;
base.OnMouseEnter(e);
this.BackColor = Color.Aquamarine;
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
this.BackColor = DefaultBackColor;
}
void checkBoxToolStrip_LabelClick(object sender, EventArgs e)
{
if (Click != null)
Click(this, e);
}
void checkBoxToolStrip_CheckedChanged(object sender, EventArgs e)
{
if (CheckedChange != null)
CheckedChange(this, e);
}
void On_MouseLeave(object sender, EventArgs e)
{
OnMouseLeave(e);
//throw new NotImplementedException();
}
void On_MouseEnter(object sender, EventArgs e)
{
this.Select();
this.Focus();
OnMouseEnter(e);
}