2010-11-22 87 views
1

充其量,我是一个UI新手,但我是一个相当不错的面向对象开发人员(如果我自己不这么说)。我很困惑如何与设计师合作。我正在开发一个Windows窗体应用程序。我有一个控制(TabPage),我从System.Windows.Forms.TabPage派生出来,我想要放在System.Windows.Forms.TabControl控件上。如何在我的Windows窗体应用程序中使用派生控件

public class MyTabPage : TabPage 
{ ... } 

我不知道如何让设计师使用我的控制。

一位开发人员看着我,因为我建议添加更多信息。

我已经原型化了一个WinForms应用程序。该应用程序有一个TabControl,其上有三个标签页。每个TabPageSplitterControl在分离器的每一半中都有一个DataGridView控制。两个DataGridView控件构成我们需要编辑的一些数据的主 - 细节视图。我为每个DataGridView控件添加了一堆事件处理程序,并且每次将处理程序代码放置在窗体中。该表格变得非常拥挤,并希望使用面向对象技术来清理事情。

我想现在重做原型,并且因为每个TabPage在行为上都是相同的,所以我想用OO来抽象出一些复杂性。这就是我在设计师方面缺乏经验的地方。必须有一种方法来使用设计器来制作比我的原型更复杂的东西。

回答

0

已经有一段时间了,但我想我会回答这个问题。

我能够通过分割控制来获得我想要的OO实现。控制与原型几乎相同。然后,我创建了一个带有派生类的控件联编程序类雇佣集,以包含我需要的特定行为。该控件具有对活页夹基类的引用,并根据需要调用活页夹功能。派生的绑定器根据需要覆盖属性和方法。几乎是一本教科书OO解决方案。

我磕磕绊绊的地方在于认为我需要控制雇主。

感谢大家的帮助。当我问这个问题时,我受到了一些压力。从那以后的几个月中我学到了多少东西,真是太神奇了。

1

用户控件

只需创建一个包含控件的用户控件。然后它将在Visual Studio的ToolBox窗口中可用。

详情Understanding the User Control Designer ...

的用户控制是类似于任何其他 类,但随着加入能力 被放置在工具箱和一个表单上显示 。

该教程与Visual Studio 2010有一点不同,但我相信您会通过它。


TabPage的控制

对于TabPage的控制,你不能用它独立的设计师。它必须是TabControl的一部分。

TabControl构建为包含TabPage控件。如果您使用设计器来添加/删除任何TabPage,在后端它会执行“新的TabPage”,它不能确定它需要创建一个TabPage派生类的新实例。


其他建议

一个TabPage的仅仅是一个容器,为什么你需要重写TabPage的控制我想不通。我知道你已经为你的问题添加了一些信息,但你可能需要重新访问,以便更好地理解。

由于TabPage是一个容器,因此应该创建一个包含SplitContainer和DataGridViews的UserControl。因此,您可以在每个TabPage上重新使用该用户控件。

设计师只是对UI编程的补充,它不是强制性的。您可以在不使用设计器的情况下将UserControl添加到TabPage。

我可能不在这里,如果有的话请提供更多的细节。您需要的视觉原型可能会有所帮助。

+0

我想出了这部分,并认为很好。我创建了一个名为MyTabPage的控件,派生自TabPage。当我在设计器中打开MyTabPage时,虽然我看不到如何添加(并排列)SplitContainer和DataGridView控件。然后我用SplitContainer控件尝试了同样的事情。同样的事情发生......我不明白如何使用设计器来编辑我的派生控件。 – 2010-11-22 16:18:11

1

不幸的是,您的问题没有真正实用的解决方案。你必须创建一个自定义的TabControl,并给它自己的设计器,以便它将创建派生类的实例,而不是默认的TabPage类。可悲的是,System.Design.dll中的TabControlDesigner类是内部的,无法从中派生。你必须写一个完整的替代品。这很难,它是一个非常先进的设计师。您可以通过Reflector查看查看结果。

+0

那么真正的UI开发人员如何开发他们的代码呢?看起来设计师对于微不足道的应用程序来说很好,但对任何物质的应用都没有用处。我想我很难买到。 – 2010-11-22 16:19:47

1

你并没有真正改变TabPage的行为,它毕竟只是一个容器:)。 TabPage和TabControl是相当紧密耦合的,他们可能应该是。你的“控制”应该放在TabPage上。因此,将您的用户控件定义为具有分隔符和两个datagridview的面板,然后将您的用户控件放在应用程序中的每个TabPage上。选项卡控制/页面串联仍将自动工作,并且您的自定义代码将处于适当的控制状态。

相关问题