gpt4 book ai didi

c# - 将 ToolStrip 上的相关控件分组,以便它们始终一起可见

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:17 25 4
gpt4 key购买 nike

我有一个应用程序,它有一个工具条,相关控件由 ToolStripSeparaters 分开。它看起来像这样:

Scenario width adequate screen width. Related controls shown together.

但是,当窗口大小缩小时,一些控件会移动到一个小的下拉部分。不幸的是,这会拆分相关控件,例如在下面的屏幕截图中,“按 ID 过滤”标签、ID 的关联文本框和“清除过滤器”按钮不再一起显示。

Narrower window with related controls split apart

如果必须将控件移动到下拉列表中,我更愿意将相关控件一起移动。有没有办法将 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 的 ResizeLayout 事件:

var filterGroup = new List<ToolStripItem> { lblFilter, txtFilter, btnClearFilter };
filterGroup.ForEach(x => x.Overflow = ToolStripItemOverflow.AsNeeded);

最佳答案

您可以使用 ToolStripControlHostwinforms TextBoxLabel 进行分组。例如

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);
}
}

另外两个选项是:

  1. 实现一个 LayoutEngine 来执行您想要的分组。
  2. 实现一个显示标签和文本框的复合 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com