その中に と IconCustom ToolStripItem
があるものを作成したかったのです。2 つのラベルcheckbox
を使用してカスタム コントロールを作成することで、これを行うことができます。picturebox
左picturebox
はアイコンの場合、右はcheckbox
お気に入りに位置を追加するための特別な役割を果たします。
そのコントロールを に追加しましたToolStripControlHost
。
- 問題は、左右の空白です。それらを削除したり、アイコンを左のバーに移動して右のスペースを削除したりしたくありません。
Padding
and の値を 0に設定しようとしましMargin
たが、うまくいきません。同様の問題がある投稿を見つけましたが、正解はありませんでした。それは可能ですか??
- ToolStripMenuItem の通常の要素と同じように、MouseEnter で行全体を強調表示したい。背景のプロパティを変更する OnMouseEnter と OnMouseLeave をオーバーライドすると、ToolStripControlHost のアンチリーではなく、ホストされたコントロールの色が変更されるだけです。ToolStripMenuItem と同じ動作をシミュレートすることは可能ですか?
今は画像 'A' のように見えますが、画像 B のように見えるようにしたいのですが、星形のチェックボックスを使用します。
基本的に、私の CustomToolStrip アイテムを ToolStripMenuItem にできるだけ似たものにしたいと考えています。Click (テキストをクリックした場合)とChackChange (スターをクリックした場合)の個別のイベント
それを行う方法はありますか?
それは My ToolStripControlHost コードの一部です:
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);
}