交互式设计时用户控制

时间:2010-02-18 23:42:46

标签: c# winforms user-controls interactive

如果标题令人困惑,我道歉,我花了近5分钟才终于想到这个标题......

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

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

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

谢谢

2 个答案:

答案 0 :(得分:3)

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

这个过程有点牵扯,所以我不会尝试发布完整的样本。相反,我会就此问题向您推荐this tutorial。简而言之,您必须创建自定义设计器,并注册一个或多个自定义操作。您可以使用此组合框创建列出可用面板的组合框,并在更改所选项目时在它们之间切换。

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

答案 1 :(得分:0)

当您创建一个继承自Control的控件时,您必须使用一些属性,例如IsDesignMode,然后您可以构建事件处理程序,尤其是在设计模式下:

if (IsDesignMode){
   // Handle the interactivity in Design mode, such as changing a property on the
   // Properties toolbox
}

假设控件有MouseClick之类的事件,你可以这样做:

private void control_MouseClick(object sender, MouseEventArgs e){
   if (IsDesignMode){
       // Do something here depending on the Click event within the Designer
   }else{
       // This is at run-time...
   }
}

另一个我能想到的是'ShouldSerialize'后面跟一个可公开访问的属性,以便将属性保存到设计器生成的代码中,假设例如一个Control有一个布尔属性Foo < / p>

public bool Foo{
    get{ return this._foo; }
    set{ if (this._foo != value){ 
                this._foo = value; 
         }
       }
}

public bool ShouldSerializeFoo(){
    return true; // The property will be persisted in the designer-generated code
                 // Check in Form.Designer.cs...
}

如果ShouldSerializeFoo返回false,则没有属性被保留,如果为true则相反,它将被隐藏在Form.Designer.cs代码中......

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