如果标题令人困惑,我道歉,我花了近5分钟才终于想到这个标题......
好的,您知道在向表单添加TabControl
时如何在Visual Studio Express中,您可以单击TabControl
右上角的右箭头,它将添加一个新TabPage
,还是删除一个?
好吧,我正在创建一个用户Control
,我需要人们在Panels之间切换(我的用户控件由几个Panel组成)。我知道这是可能的,因为我过去使用过功能区Control
,您可以在Designer视图中添加新按钮等。
有人可以就如何实现这一目标提供任何建议/意见吗?
谢谢
答案 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代码中......
希望这有帮助, 最好的祝福, 汤姆。