C# Winforms Toolstripdropdown 在按钮单击时关闭
C# Winfoms Toolstripdropdown close on button click
我在我的 Windows 表单中使用 toolstripdropdown 来显示单击另一个按钮时的按钮列表。
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。因此,每当用户单击表单中的任何位置时,工具条下拉列表就会关闭。还行吧。
我的要求:
- 单击“显示”按钮
- 通过调用 td.show() 显示工具条下拉列表,如果
td.Visible
则关闭弹出窗口
- 再次单击“显示”按钮
- 应该关闭 toolstripdrown
- 单击表单中的任意位置,toolstripdropdown 如果可见则应将其关闭
现在发生的情况是,在第 3 步中,在引发按钮单击事件之前,toolstripdropdown 正在关闭。所以再次显示下拉菜单。
还有其他方法可以达到我的要求吗?
您应该处理下拉菜单的 Closing
事件,并在下拉菜单通过单击打开它的按钮关闭时设置一个标志。然后当你点击按钮时,检查标志,如果没有标志,显示下拉菜单并设置标志,否则关闭下拉菜单并清除标志:
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;
}
}
我在我的 Windows 表单中使用 toolstripdropdown 来显示单击另一个按钮时的按钮列表。
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。因此,每当用户单击表单中的任何位置时,工具条下拉列表就会关闭。还行吧。
我的要求:
- 单击“显示”按钮
- 通过调用 td.show() 显示工具条下拉列表,如果
td.Visible
则关闭弹出窗口
- 再次单击“显示”按钮
- 应该关闭 toolstripdrown
- 单击表单中的任意位置,toolstripdropdown 如果可见则应将其关闭
现在发生的情况是,在第 3 步中,在引发按钮单击事件之前,toolstripdropdown 正在关闭。所以再次显示下拉菜单。
还有其他方法可以达到我的要求吗?
您应该处理下拉菜单的 Closing
事件,并在下拉菜单通过单击打开它的按钮关闭时设置一个标志。然后当你点击按钮时,检查标志,如果没有标志,显示下拉菜单并设置标志,否则关闭下拉菜单并清除标志:
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;
}
}