【问题标题】:Interactive Design-Time User Control交互式设计时用户控制
【发布时间】:2010-02-18 23:42:46
【问题描述】:

如果标题令人困惑,我深表歉意,我花了将近 5 分钟才最终想到这个标题...

好的,您知道在 Visual Studio Express 中如何在表单中添加TabControl,您可以单击TabControl 右上角的右箭头,它会添加一个新的TabPage ,还是删除一个?

好吧,我正在创建一个用户Control,我需要人们能够在面板之间切换(我的用户控件由多个面板组成)。我知道这是可能的,因为我过去使用过功能区 Control,您可以在设计器视图中添加新按钮等。

有人可以就我如何实现这一目标提供任何建议/建议吗?

谢谢

【问题讨论】:

  • i think 你所说的叫做“智能标签”,但我可能是错的。

标签: c# winforms user-controls interactive


【解决方案1】:

如果我正确理解您的问题,那么您说的是智能标签

这个过程有点复杂,所以我不会尝试发布完整的示例。相反,我会将您转介至this tutorial。长话短说,您必须创建一个自定义设计器,并注册一个或多个自定义操作。您可以使用它来创建一个组合框,列出可用面板,并在所选项目更改时在它们之间切换。

(注意 - 术语“智能标签”在 Visual Studio 中有两个不同的含义 - 我说的是可视化设计器智能标签,而不是代码编辑器中的智能标签)。

【讨论】:

  • +1 @Aaronaught:很好的教程...hhmmm...优先事项...*保存链接以备后用*...
【解决方案2】:

当您创建一个从Control 继承的控件时,您必须使用几个属性,例如IsDesignMode,然后您可以构造事件处理程序,特别是在设计模式中:

如果(IsDesignMode){ // 处理设计模式下的交互性,比如改变一个属性 // 属性工具箱 }

假设控件有MouseClick等事件,可以这样做:

private void control_MouseClick(对象发送者,MouseEventArgs e){ 如果(IsDesignMode){ // 根据设计器中的 Click 事件在这里做一些事情 }别的{ // 这是在运行时... } }

我能想到的另一个是 'ShouldSerialize' 后跟一个可公开访问的属性,以便将该属性持久保存到设计器生成的代码中,例如,假设控件具有布尔属性 Foo

公共布尔 Foo{ 得到{返回这个._foo; } 设置{ if (this._foo != value){ this._foo = 价值; } } } 公共布尔应该SerializeFoo(){ 返回真; // 该属性将保留在设计器生成的代码中 // 签入 Form.Designer.cs... }

如果ShouldSerializeFoo返回false,则没有属性被持久化,如果为true则相反,它将被埋在Form.Designer.cs代码中......

希望这会有所帮助, 最好的祝福, 汤姆。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多