C#Winfoms Toolstripdropdown关闭按钮单击
我在Windows窗体中使用了toolstripdropdown,在单击另一个按钮时显示按钮列表C#Winfoms Toolstripdropdown关闭按钮单击,c#,.net,winforms,toolstrip,toolstripdropdown,C#,.net,Winforms,Toolstrip,Toolstripdropdown,我在Windows窗体中使用了toolstripdropdown,在单击另一个按钮时显示按钮列表 var td = new ToolStripDropDown { AutoSize = true, DropShadowEnabled = false, BackColor = Color.Transparent, Margin = Padding.Empty, P
var td = new ToolStripDropDown
{
AutoSize = true,
DropShadowEnabled = false,
BackColor = Color.Transparent,
Margin = Padding.Empty,
Padding = Padding.Empty
};
var host = new ToolStripControlHost(panel)
{
BackColor = Color.Transparent,
Margin = Padding.Empty,
Padding = Padding.Empty
};
td.Items.Add(host);
该面板包含要显示的按钮列表。要向用户显示面板,请在按钮(显示)上单击下面的行
td.Show(pointonScreen);
默认情况下,AutoClose
设置为true。因此,每当用户单击表单中的任何位置时,toolstripdropdown就会关闭。这没关系
我的要求:
ToolStripDropDown td;
private void Form1_Load(object sender, EventArgs e)
{
td = new ToolStripDropDown { /*...*/};
var host = new ToolStripControlHost(this.panel1){ /*...*/};
td.Items.Add(host);
td.Closing += td_Closing;
}
void td_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
if (this.button1.Bounds.Contains(this.PointToClient(MousePosition)))
{
td.Tag = true;
return;
}
td.Tag = null;
}
private void button1_Click(object sender, EventArgs e)
{
if (td.Tag == null)
{
td.Show(Cursor.Position);
td.Tag = true;
}
else
{
td.Close();
td.Tag = null;
}
}
您应该处理下拉列表事件,并通过单击打开下拉列表的按钮来设置关闭下拉列表的标志。然后,当您单击按钮时,检查标志,如果没有标志,则显示下拉列表并设置标志,否则关闭下拉列表并清除标志:
ToolStripDropDown td;
private void Form1_Load(object sender, EventArgs e)
{
td = new ToolStripDropDown { /*...*/};
var host = new ToolStripControlHost(this.panel1){ /*...*/};
td.Items.Add(host);
td.Closing += td_Closing;
}
void td_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
if (this.button1.Bounds.Contains(this.PointToClient(MousePosition)))
{
td.Tag = true;
return;
}
td.Tag = null;
}
private void button1_Click(object sender, EventArgs e)
{
if (td.Tag == null)
{
td.Show(Cursor.Position);
td.Tag = true;
}
else
{
td.Close();
td.Tag = null;
}
}
杰出的“this.button1.Bounds.Contains(this.PointToClient(MousePosition))”这是我漏掉的一行。谢谢。。。。你救了我一天…太好了。。。“this.button1.Bounds.Contains(this.PointToClient(MousePosition))”这是我漏掉的一行。谢谢。。。。你救了我一天。。。。