2

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

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

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

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

谢谢

4

2 回答 2

3

如果我正确理解您的问题,那么您正在谈论smart tags

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

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

于 2010-02-19T00:16:02.513 回答
0

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

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

假设控件有一个事件如MouseClick,你可以这样做:

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

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

公共布尔 Foo{
    得到{返回这个._foo; }
    设置{ if (this._foo != value){
                this._foo = 价值;
         }
       }
}

公共布尔应该SerializeFoo(){
    返回真;// 该属性将保留在设计器生成的代码中
                 // 签入 Form.Designer.cs...
}

如果ShouldSerializeFoo返回false,则不保留任何属性,如果为true,则相反,它将被埋在Form.Designer.cs代码中...

希望这会有所帮助,最好的问候,汤姆。

于 2010-02-19T00:06:28.120 回答