我的应用程序有一个工具条,其中相关的控件由ToolStripSeparaters分开设置。它看起来像这样:
但是,当窗口大小缩小时,某些控件会移动到一个小的下拉部分。不幸的是,这可以拆分相关的控件,例如在下面的屏幕截图中,"按标识过滤"标签,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);
答案 0 :(得分:2)
您可以使用ToolStripControlHost
对winforms
TextBox
和Label
进行分组。 E.g。
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