【问题标题】:How do I paint the same area with different set of controls?如何使用不同的控件集绘制相同的区域?
【发布时间】:2010-02-03 12:47:43
【问题描述】:

我正在使用 Winforms/C# .NET。

ToolStrip 中,我有不同的按钮,每个按钮都应该将我们带到不同的page。 (我不知道我应该用什么词来形容这个。)

我无法清楚地表达出来。描述我想要的密切相关的软件是 ccleaner 在此处查看图片:http://i.imagehost.org/0569/cc.gif alt text http://i.imagehost.org/0569/cc.gif

在选择时,从左侧 ccleaner、注册表、任务、选项的选项中选择每个选项卡/按钮/(我不知道它实际上是什么)。红框内的内容发生变化。

这正是我想要的。还有,我怎样才能得到这样的样子?

【问题讨论】:

  • 我想你自己回答了这个问题......标签。
  • 请您列出其中使用的控件吗?我不敢相信它们是标签。他们是如何修改这个的?
  • @walter,我不打算为你做这项工作。去看看那里的标签库,看看它们可以实现什么,这不是一个复杂的问题,你自己解决它会更好。
  • 我不是要你为我工作。我只是要求给我一些开始。我不知道在谷歌搜索什么。我不知道万物的存在。

标签: c# .net winforms user-interface


【解决方案1】:

我的解决方案有点复杂,但效果很好。使您要显示的每个页面都源自UserControl,并将其所有控件放在上面。我的“标签”实际上是在平铺模式下绘制的所有者 ListView。通过所有者绘图,我在ListView 上实现了很好的鼠标悬停效果。当ListView 上的选择发生变化时,显示相应的页面。

【讨论】:

    【解决方案2】:

    您可以拥有绘制选项卡控件/树视图控件来达到类似的效果

    【讨论】:

      【解决方案3】:

      好吧,如果你有雄心壮志并想冒险I do it this way

      基本上,我编写了一个看起来像 C# 的函数来创建我在任何时候想要的控件。

      我说“看起来像”是因为它使用了一种特殊的控制结构,称为差分执行,它允许在不同的模式下调用它。

      • 在“显示”模式下,它只是执行此操作 - 创建和放置控件。

      • 在擦除模式下,它的作用正好相反,移除了之前放置的控件。

      • 在更新模式下,它会做任何必须做的事情,以将控件集从原来的状态逐步更改为所需的状态。

      • 在事件模式下,它处理 UI 输入事件,将它们路由到适当的控件并执行您想要完成的操作。

      为什么?

      • 您永远不必编写事件处理程序。您永远不必创建变量来保存控件或创建控件 ID。

      • 屏幕上可能显示的控件数量没有限制,因为当控件不可见时,它们不会占用存储空间。 (而且它会自动且微不足道地进行垃圾收集控制。)

      • 绘制所需内容的例程方式比绘制、擦除、增量更新和处理事件的例程更容易编写。

      • 1234563无需编码即可进行各种数据绑定。

      我们的产品拥有很多个用户界面,有无数种选择。我无法做到这一点。

      【讨论】:

        【解决方案4】:

        有两种方法可以实现这一点

        1. 效率不高:
          采用选项卡控件并为每个按钮操作添加选项卡(左侧的导航操作)。单击导航按钮时,仅显示一个选项卡并隐藏其他选项卡。这将达到相同的效果。

        2. 我认为更好的方法 为每个屏幕创建复合控件,并在单击导航按钮时将其动态加载到右侧容器区域。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多