- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我将一个工具条向左拖动(可能只是为了将它放在角落里)和同一个工具条面板中的另一个工具条时,我正在拖动的工具条会跳到"new"行,就好像我已经移动了一样它下来。这很难解释,所以这里有几个图表。
图表 A:我将工具条向左移动,但“不小心”向左移动了太多(只移动了几十个像素,用户可以轻松做到)。
图 B:发生这种情况,拖动的工具条向下一行。
如何防止这个新行被“创建”?作为最后的手段,我很乐意阻止在任何情况下创建新行(例如:如果用户打算将其向下拖动以创建新行)。
我已经尝试过 LayoutStyle 但无济于事。
最佳答案
可能有几种方法可以做到这一点。我已经尝试了一些,但没有一个是完美的。我会说我发现的最简单的方法是像 Hans 提到的那样设置 ToolStripPanel 的最大大小,并将 ToolStrip 子类化并覆盖 OnLocationChanged
(或将事件处理程序分配给 LocationChanged
而不是子类化,但您必须为每个 ToolStrip 分配一个处理程序)。
public class ToolStripEx : ToolStrip
{
protected override void OnLocationChanged(EventArgs e)
{
if (this.Location.Y >= this.Parent.MaximumSize.Height)
{
this.Location = new Point(this.Location.X, 0);
}
else
{
base.OnLocationChanged(e);
}
}
}
注意:这会导致鼠标在尝试向下拖动 ToolStrip 时来回跳动,因为 Location 在已经更改后被重置,所以它基本上是向下移动,然后立即跳回。
还值得一提的是,这可能会让用户感到烦恼,尤其是当他们故意尝试将 ToolStrip 放在新行中时,所以我真的不建议这样做。但既然你问了,那就是了。
更新完整步骤和代码:
我创建了一个新的空白 Windows 窗体项目。我在解决方案中添加了一个新文件 ToolStripEx.cs
,这是里面的内容:
更新了其他面板及其方向
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public class ToolStripEx : ToolStrip
{
protected override void OnLocationChanged(EventArgs e)
{
if (this.Parent is ToolStripPanel)
{
ToolStripPanel parent = this.Parent as ToolStripPanel;
if (parent.Orientation == Orientation.Horizontal)
{
if (this.Location.Y != 0)
{
this.Location = new Point(this.Location.X, 0);
return;
}
}
else if (parent.Orientation == Orientation.Vertical)
{
if (this.Location.X != 0)
{
this.Location = new Point(0, this.Location.Y);
return;
}
}
}
base.OnLocationChanged(e);
}
}
}
然后我构建了解决方案,因此 ToolStripEx
类将显示在工具箱中。
然后我将一个常规的 ToolStripContainer
从工具箱放到表单上,将 Dock
设置为 Fill
,设置颜色等。
然后我将两个 ToolStripEx
(带有您提到的齿轮图标)从工具箱拖到 TopToolStripPanel
。我设置它们的颜色和渲染器等等。
这是 Form1.cs
的样子:
已更新以设置其他最大尺寸
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.toolStripContainer1.TopToolStripPanel.MaximumSize = new Size(0, toolStripEx1.Height);
this.toolStripContainer1.LeftToolStripPanel.MaximumSize = new Size(toolStripEx1.Height, 0);
this.toolStripContainer1.BottomToolStripPanel.MaximumSize = new Size(0, toolStripEx1.Height);
this.toolStripContainer1.RightToolStripPanel.MaximumSize = new Size(toolStripEx1.Height, 0);
}
}
}
注意:此代码可防止任何面板扩展其行(或列,如果它们的Orientation
为Orientation.Vertical
)如果您希望侧面板能够展开,请不要设置它们的最大尺寸并去掉 else if parent.Orientation == Orientation.Vertical
部分。
应该就这些了。我运行了这个,当移动它们时,两个 ToolStripEx
都没有消失。
正如 Hans 所说,ToolStrip
类非常古怪,几乎任何解决问题的方法都不会是完美的,除非您根据自己的需要从头开始开发自己的控件。
如果出于某种原因您需要扩展 ToolStripContainer
类,请将其与新的 ToolStripEx
类分开。我怀疑使用嵌套类会导致您仍在使用常规 ToolStrip
而不是 ToolStripEx
类。
另一个更新 - 修复鼠标跳跃:我在尝试摆脱鼠标光标问题时偶然发现了这一点。将此添加到 ToolStripEx
类:
protected override void OnBeginDrag(EventArgs e)
{
//base.OnBeginDrag(e);
}
奇怪的是,这似乎大大降低了工具条被拖出面板的阻力。我还没有深入研究为什么会这样,但似乎 ToolStrip 实现了自己的拖动行为而不使用基本的拖放功能,并且通过覆盖 OnBeginDragDrop
ToolStrip 然后专门使用其自定义行为,这使得鼠标在拖动时表现得更好。
关于c# - 如果另一个工具条位于同一个工具条面板上,则将工具条稍微向左移动会创建一个新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120432/
只是想知道 Jquery Mobile 是否足够稳定以用于实时生产企业移动应用程序。 有很多 HTML5 框架,因为我们的团队使用 JQuery 已经有一段时间了,我们更愿意使用 Jquery 移动框
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
所以我尝试在 JavaScript 中对元素进行拖放。我使用的视频教程在这里; https://www.youtube.com/watch?v=KTlZ4Hs5h80 。我已经按照它的说明进行了编码,
无法在移动 iOS(safari 和 chrome)上自动播放以前缓存的 mp3 音频 我正在 Angular 8 中开发一个应用程序,在该应用程序的一部分中,我试图在对象数组中缓存几个传入的音频 m
Git 基于内容而不是文件,所以我目前理解以下行为,但我想知道是否有特殊选项或 hack 来检测此类事情: git init mkdir -p foo/bar echo "test" foo/a.tx
我正在寻找语义 ui 正确的类来隐藏例如移动 View 中的 DIV。在 Bootstrap 中,我们有“visible-xs”和“hidden-xs”。 但是在语义ui上我只找到了“仅移动网格” 最
我正在使用 ubuntu 和 想要移动或复制大文件。 但是当我与其他人一起使用服务器时,我不想拥有所有内存并使其他进程几乎停止。 那么有没有办法在内存使用受限的情况下移动或复制文件? 最佳答案 如果你
这些指令有什么区别?以 ARM9 处理器为例,它不应该是: ASM: mov r0, 0 C: r0 = 0; ASM: ld r0, 0 C: r0 = 0; ? 我不知道为什么要使用一个或另一个:
我有一个文件夹,其中包含一些随机命名的文件,其中包含我需要的数据。 为了使用数据,我必须将文件移动到另一个文件夹并将文件命名为“file1.xml” 每次移动和重命名文件时,它都会替换目标文件夹中以前
我经常在 IB/Storyboard 中堆叠对象,几乎不可能拖动其他对象后面的对象而不移动前面的对象。无论如何我可以移动已经选择但位于其他对象后面的对象吗?当我尝试移动它时,它总是选择顶部的对象,还是
几个月前,我看到 Safari 7 允许推送通知,它似乎是一个非常有用的工具,除了我看到的每个示例都专注于桌面浏览,而不是移动设备。 Safari 推送通知是否可以在移动设备上运行,如果没有,是否有计
我有一个简单的 View 模型,其中包含修改后的 ObservableCollection使用 SynchronizationContext.Current.Send在 UI 线程上执行对集合的更改。
关于cassandra创建的数据文件和系统文件的位置,我需要移动在“cassandra.yaml”配置文件中设置的“commitlog_directory”、“data_file_directorie
我有这个代码 $(function() { var message = 'Dont forget us'; var original; var txt1 = ' - '; $(wind
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我有这个 HTML 标记: Express 300 bsf Sign Up 我需要将元素从 DOM 上的一个
我有一个可重新排序的 TableView (UITableView 实例)。尽管我已经实现了 UITableViewDataSource 方法: tableView:moveRowAtIndexPat
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我需要在拖放或复制/剪切和粘贴(复制与移动)期间获取操作类型。它是一个 Swing 应用程序,并且实现了 TransferHandle。我在操作结束时需要此信息,在 importData 方法中。 对
我编写了一个具有 add 和 get 方法的 SortedIntList 类。 我调用以下四个方法: SortedIntList mySortedIntList = new SortedIntList
我是一名优秀的程序员,十分优秀!