我有一个应用程序,它有一个工具条,相关控件由 ToolStripSeparaters 分开。它看起来像这样:
但是,当窗口大小缩小时,一些控件会移动到一个小的下拉部分。不幸的是,这会拆分相关控件,例如在下面的屏幕截图中,“按 ID 过滤”标签、ID 的关联文本框和“清除过滤器”按钮不再一起显示。
如果必须将控件移动到下拉列表中,我更愿意将相关控件一起移动。有没有办法将 ToolStrip 上的相关控件组合在一起?或者也许有更好的方法来处理这种情况?
我尝试使用 LayoutCompleted
事件将所有控件移动到溢出区域(如果它们中的任何一个在溢出区域中)。
private void toolStrip1_LayoutCompleted(object sender, EventArgs e)
{
var filterGroup = new List<ToolStripItem> { lblFilter, txtFilter, btnClearFilter };
if (filterGroup.Any(x => x.IsOnOverflow))
{
filterGroup.ForEach(x => x.Overflow = ToolStripItemOverflow.Always);
}
}
这似乎工作正常,但我还没有找到在窗口大小增加时再次显示它们的好方法。我使用以下代码尝试了 ToolStrip 的 Resize
和 Layout
事件:
var filterGroup = new List<ToolStripItem> { lblFilter, txtFilter, btnClearFilter };
filterGroup.ForEach(x => x.Overflow = ToolStripItemOverflow.AsNeeded);
最佳答案
您可以使用 ToolStripControlHost
对 winforms
TextBox
和 Label
进行分组。例如
public class ToolStripLabelTextBox : ToolStripControlHost {
public Label Label { get; private set; }
public TextBox TextBox { get; private set; }
public ToolStripLabelTextBox(String labelText) : base(new FlowLayoutPanel { FlowDirection = FlowDirection.LeftToRight, WrapContents = false, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Padding = Padding.Empty, Margin = Padding.Empty }) {
Label = new Label { Text = labelText, AutoSize = true, Anchor = AnchorStyles.Top | AnchorStyles.Bottom, TextAlign = System.Drawing.ContentAlignment.MiddleCenter };
TextBox = new TextBox();
FlowLayoutPanel panel = (FlowLayoutPanel) Control;
panel.Controls.Add(Label);
panel.Controls.Add(TextBox);
}
}
另外两个选项是:
- 实现一个
LayoutEngine
来执行您想要的分组。 - 实现一个显示标签和文本框的复合
ToolStripItem
。您可以使用ToolStripRadioButtonMenuItem
作为示例:https://msdn.microsoft.com/en-us/library/vstudio/ms404318%28v=vs.100%29.aspx
关于c# - 将 ToolStrip 上的相关控件分组,以便它们始终一起可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091144/