【问题标题】:DockPanel Suite : Open Document-tab Location?DockPanel Suite:打开文档选项卡位置?
【发布时间】:2011-01-30 19:59:55
【问题描述】:

我们正在改进我们的 winforms 用户界面以使用 Weifen Luo DockPanel Suite,并且由于我们的旧 UI 没有选项卡,我们希望在新窗口停靠到文档区域时显示气球工具提示,通知用户他们可能会撕下文档并将其浮动到任何他们想要的地方。

我认为要做到这一点,我需要能够以编程方式确定停靠窗口选项卡的位置。我们的 DockPanel 的 DocumentStyle 设置为 DockingWindow,因此任何停靠在“文档”区域的窗口始终显示选项卡。

有什么想法吗?

【问题讨论】:

    标签: c# .net winforms dockpanel-suite


    【解决方案1】:

    根据您的描述,不清楚您是否要将气泡精确定位在新创建的选项卡上,或者您是否可以将其显示在选项卡条上,在固定的 x 轴位置,但根据 y- 正确定位条带的轴位置(这是两种方法中较简单的一种)。

    因此,我将为更简单的场景提供解决方案,并为更复杂的场景提供选项。

    首先是简单的解决方案。当标签位于顶部时,界限.TOP和ClientRectangle.top值不一样。当标签位于底部时,它们是。我们可以将此信息与 Bounds.Height 和 Bounds.Top 一起使用来计算正确的 y 轴位置。

    下面是一些执行此操作的示例代码,虽然很幼稚。 (例如,它不会在创建后立即处理文档,这与由于用户拖动窗口而发生的情况不同,这留给读者作为练习。)

    设置DockContent时,注册事件:

    class DocumentWindow : DockContent {
        //...
    }
    
        DocumentWindow doc = new DocumentWindow();
        doc.Text = "Document 1";
        doc.DockStateChanged += new EventHandler(doc_DockStateChanged);
        doc.Show(this.dockPanel1, DockState.Document); 
    

    处理事件时:

    void doc_DockStateChanged(object sender, EventArgs e)
    {
        DockContent doc = sender as DockContent;
        if (doc != null)
        {
            if (doc.DockState == DockState.Document)
            {
                Debug.Write("Client:");
                Debug.WriteLine(doc.ClientRectangle);
                Debug.Write("Bounds:");
                Debug.WriteLine(doc.Bounds);
                int y = doc.ClientRectangle.Top == doc.Bounds.Top ? doc.ClientRectangle.Bottom : doc.Bounds.Top;
                this.toolTip1.Show("You may tear this \r\nsucker out any \r\ntime you like!", doc.PanelPane, doc.PanelPane.Right, y, 5000);
            }
        }
    }
    

    如果您想要更高级的方法,事情就不会那么容易了。我想出的选项 因为你在下面:

    1) 更改基础库代码以公开 DockPaneStripBase.Tab 类并公开选项卡矩形。

    2) 实现您自己的自定义 DockPaneStrip,如 DockSample 应用程序代码所示。

    3) 检查选项 1 和/或 2 的代码并设计一个方案,允许您计算放置工具提示的位置。

    仅供参考,对于其他希望了解更高级方法所涉及的工作量的阅读本文的人。 WeifenLuo DockPanel 和 DockSample 应用程序的源代码可以从以下位置获得: http://sourceforge.net/projects/dockpanelsuite/files/DockPanel%20Suite/2.5.0%20RC1/ 是以_Src结尾的包名。

    【讨论】:

    • 哇,嘿,谢谢你的回答。自从一年多前我问过这个问题以来,我将不得不找到可以从中受益的代码。 +1,每当我尝试这个时,都会得到一个接受的答案。 :) 谢谢!
    • 我无聊了一晚。 :-) 我的雇主实际上使用的是商业包(DotNetBar)。我怀疑它可能允许以更简单的方式实现这一点......但是我又没有用 DotNetBar 尝试过。
    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2016-09-04
    • 2012-01-30
    • 2014-01-15
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多