【发布时间】:2015-07-27 03:30:37
【问题描述】:
我有一个扩展System.Windows.Forms.TabControl 的类,并为其TabPages 实现了拖放机制,如下所示:
#region Overriden base methods
protected override void OnDragOver(DragEventArgs e)
{
if (PointedTabPage == null) return;
e.Effect = DragDropEffects.Move;
var dragTab = e.Data.GetData(typeof (ManagedTabPage)) as ManagedTabPage;
if (dragTab == null) return;
int dropIndex = TabPages.IndexOf(PointedTabPage);
int dragIndex = TabPages.IndexOf(dragTab);
if (dragIndex == dropIndex) return;
var modifiedTabPages = new List<ManagedTabPage>(from ManagedTabPage tabPage in TabPages
where TabPages.IndexOf(tabPage) != dragIndex
select TabPages[TabPages.IndexOf(tabPage)] as ManagedTabPage);
modifiedTabPages.Insert(dropIndex, dragTab);
for (byte i = 0; i < TabPages.Count; ++i)
{
var managedTabPage = TabPages[i] as ManagedTabPage;
if (managedTabPage != null && managedTabPage.Uid == modifiedTabPages[i].Uid)
continue;
TabPages[i] = modifiedTabPages[i];
}
SelectedTab = dragTab;
}
protected override void OnMouseDown(MouseEventArgs e)
{
try
{
switch (e.Button)
{
case MouseButtons.Left:
DoDragDrop(PointedTabPage, DragDropEffects.Move);
break;
case MouseButtons.Middle:
CloseTab(PointedTabPage);
break;
}
}
catch (InvalidOperationException)
{
}
finally
{
TabPages.Insert(0, String.Empty);
TabPages.RemoveAt(0);
}
}
#endregion
请注意,在 OnMouseDown 方法的 finally 子句中,有 2 行可解决
问题:由于某种原因,在拖放后没有这些行任何TabPages 的标题对齐都是错误的:
如果没有这种臭的解决方法,我应该怎么做才能纠正这种行为?也许发送一些 Windows 消息可以解决问题? 非常感谢您的任何建议。
编辑 1. ManagedTabPage 的代码 100% 不重要(它只是扩展了 TabPage 的一些特定属性)。
PointedTabPage 也不重要,但就是这样:
return (from ManagedTabPage tabPage in TabPages
let tabPageIndex = TabPages.IndexOf(tabPage)
where GetTabRect(tabPageIndex).Contains(PointToClient(Cursor.Position))
select TabPages[tabPageIndex]).Single() as ManagedTabPage;
我正在尝试实现标签的完全居中对齐。你看,截图上的标签没有水平居中?
【问题讨论】:
-
代码示例现在不完整:
PointedTabPage是什么?ManagedTabPage代码可能很重要。您要达到哪种对齐方式? -
@ASh 我已经编辑了,请检查一下
-
PointedTabPage is unimportant too你这么说真的很奇怪,因为PointedTabPage被积极使用; CAN"T REPRODUCE ISSUE with given code and TabPage in placeof ManagedTabPage -
@ASh 代码并不重要,因为它对对齐没有影响。
-
@ASh 设置你的
TabControl的这些属性:AllowDrop = true; SizeMode = TabSizeMode.Fixed; ItemSize = new Size(224, 20);
标签: c# winforms drag-and-drop tabcontrol tabpage