2012-01-14 144 views
3

我正在尝试创建的东西与VS 2008和VS 2010中的“工具箱”非常相似。它将位于我的MDI父级的左侧,并将弹出当用户将鼠标悬停在其上时。再次,这就像VS工具箱。C#实现垂直自动隐藏工具栏的方法

我的问题是实现这个最好的方法是什么?请记住我将它放在MDI父项的左侧,并使用VS 2008,C#和.NET 3.5。另外,我打算在工具栏中放置一个TreeView,所以无论使用什么,都必须支持添加TreeView对象。

谢谢!

+0

@Sam:看到我的答案为我目前的解决方案。 如果可能,我想要一个缓慢弹出的解决方案。任何人都有这样的解决方案? – CODe 2012-01-14 09:33:25

回答

2

从我在线收集和测试的垂直自动隐藏工具栏中,最好使用一个ToolStrip对象实现,在我的案例中停靠在左侧。为了给出弹出的TreeView对象的外观,添加一个ToolStripButton。然后,将一个MouseHover事件添加到ToolStripButton中,该事件使Panel对象(也停靠在左侧)可见。显然,默认情况下最好使Panel对象不可见。然后,为面板添加一个MouseLeave事件,这样当用户离开面板时,面板会再次变为不可见或“弹出”回来。

它没有像Visual Studio 2008那样弹出的好效果/ 2010,但它具有我需要的基本功能。

这里是MouseHover和MouseLeave事件的代码。很简单。

private void openPanel1ToolStripButton_MouseHover(object sender, EventArgs e) 
    { 
     if(panel1.Visible == false) 
     { 
      panel1.Visible = true; 
     } 
    } 

    private void panel1_MouseLeave(object sender, EventArgs e) 
    { 
     if (panel2.Visible == true) 
     { 
      panel2.Visible = false; 
     } 
    } 
+2

如果你不想滑入和滑出,添加一个短时间运行的Timer。当您使面板可见时,将其宽度(大小)设置为较小的值,并在每个计时器事件中,将宽度设置得更宽一点,直到达到完整大小。 (类似于100秒的间隔运行一秒钟,所以它以10步打开,每次显示额外宽度的十分之一应该看起来不错) – 2012-01-14 16:59:14

+0

@Jason:伟大的提示,非常好的主意! – CODe 2012-01-25 21:46:49

1

查看SourceForge上的DockPanel Suite。我在网上看到很多试图模仿VS工具栏的自定义控件,但没有一个能像这个那样工作。它的用户评价也很高。

+0

非常感谢,这个图书馆看起来不错。我肯定会在其他项目上使用它。不幸的是,我的雇主要求我尽可能少使用外部库代码,所以我不得不自己实现它。 – CODe 2012-01-25 21:48:07