文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ASP.NET控件设计时操作列表与模板编辑的示例分析

2023-06-18 00:58

关注

小编给大家分享一下ASP.NET控件设计时操作列表与模板编辑的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

ASP.NET控件设计时操作列表与模板编辑一.智能标记

先看一张图.

ASP.NET控件设计时操作列表与模板编辑的示例分析

GridView右侧的小三角可以很轻松的帮助我们设置常用的属性,如下面的启动分页,启用排序等,通过这样的方式我们可以很快的完成工作。我们称这样的任务菜单为智能标记.

下面来看看ASP.NET控件设计时操作列表与模板编辑如何实现

重写ControlDesigner的ActionLists属性

你必须重写这个属性,返回你自定义的智能标记集合(即DesignerActionListCollection),这里假设CustomControlActionList为自定义的智能

public class SampleControlDesigner : ControlDesigner  {      public SampleControlDesigner()          : base()      {      }       //创建一个自定义操作列表集合      public override DesignerActionListCollection ActionLists      {          get         {              DesignerActionListCollection actionLists = new DesignerActionListCollection();              actionLists.Add(new CustomControlActionList(this));               return actionLists;          }      }    }

CustomControlActionList 自定义项列表

1项列表分类

(1)面板

(2)属性面板

(3)方法面板

类图如下

ASP.NET控件设计时操作列表与模板编辑的示例分析

看个效果图,你就明白怎么回事了

ASP.NET控件设计时操作列表与模板编辑的示例分析

2实现

(1)继承DesignerActionList类,重写GetSortedActionItems方法添加自定义项面板集合,即2.1的三种项面板

public override DesignerActionItemCollection GetSortedActionItems()  {      if (items == null)      {          items = new DesignerActionItemCollection();          // 添加面板          items.Add(new DesignerActionHeaderItem("快速设置面板测试:"));          //添加属性相关面板          items.Add(new DesignerActionPropertyItem("Visible",                   "是否显示"));          items.Add(new DesignerActionPropertyItem("Width",                  "设置宽度"));          items.Add(new DesignerActionPropertyItem("Height",                 "设置高度"));          // 添加方法相关面板           items.Add(new DesignerActionMethodItem(this, "FormatBlue", "定义背景为蓝色", true));          items.Add(new DesignerActionMethodItem(this, "FormatRed", "定义背景为红色", true));          items.Add(new DesignerActionMethodItem(this, "FormatWhite", "定义背景为白色", true));                }      return items;  }

(2)属性,方法项面板的实现

如果你设置属性的话,则必须在CustomControlActionList定义属性,方法也相同,代码如下

#region 自定义方法           public void FormatBlue()          {              SampleControl ctrl = (SampleControl)_parent.Component;              TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat);              ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatBlue", "FormatBlue");          }           public void FormatRed()          {              SampleControl ctrl = (SampleControl)_parent.Component;              TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat);              ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatRed", "FormatRed");          }           public void FormatWhite()          {              SampleControl ctrl = (SampleControl)_parent.Component;              //定义委托              TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat);              ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatWhite", "FormatWhite");          }           #endregion
#region 自定义属性           public bool Visible          {              get             {                  SampleControl ctrl = (SampleControl)_parent.Component;                  return ctrl.Visible;              }              set             {                      PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Visible"];                      propDesc.SetValue(_parent.Component, value);               }          }           public Unit Width          {              get             {                  SampleControl ctrl = (SampleControl)_parent.Component;                  return ctrl.Width;              }              set             {                  PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Width"];                  propDesc.SetValue(_parent.Component, value);              }          }           public Unit Height          {              get             {                  SampleControl ctrl = (SampleControl)_parent.Component;                  return ctrl.Height;              }              set             {                  PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Height"];                  propDesc.SetValue(_parent.Component, value);              }          }           #endregion           public bool DoFormat(object arg)          {              SampleControl ctl = (SampleControl)_parent.Component;              string fmt = (string)arg;               PropertyDescriptor backColorProp = TypeDescriptor.GetProperties(ctl)["BackColor"];               switch (fmt)              {                  case "FormatBlue":                      backColorProp.SetValue(ctl, Color.Blue);                      break;                  case "FormatRed":                       backColorProp.SetValue(ctl, Color.Red);                      break;                  case "FormatWhite":                      backColorProp.SetValue(ctl, Color.White);                      break;              }               //刷新设计时html标记              _parent.UpdateDesignTimeHtml();               return true;          }

以上步骤完成以后就大功告成了,接着则与相关控件关联起来就可以了,效果图在上面已经看过了.

[DesignerAttribute(typeof(SampleControlDesigner))]

ASP.NET控件设计时操作列表与模板编辑二.模板编辑器

ASP.NET控件设计时操作列表与模板编辑的示例分析

上面的模板编辑界面相信大家都很熟悉吧.设置支持怎么少的了模板呢.设置时模板编辑实现比较简单,下面来看下如何实现

这里自定义的模板控件不再列出

重写ControlDesigner类的TemplateGroups返回自定义模板组集合即(TemplateGroupCollection)

添加步骤跟表格的添加类似,td add tr然后table add td

模板则是TemplateGroup add TemplateDefinition 然后TemplateGroupCollection add TemplateGroup

代码如下

public override TemplateGroupCollection TemplateGroups          {              get             {                   if (col == null)                  {                      col = base.TemplateGroups;                       TemplateGroup tempGroup;                      TemplateDefinition tempDef;                      TemplateGroupsSample ctl;                       ctl = (TemplateGroupsSample)Component;                       // 创建模板分组一                      tempGroup = new TemplateGroup("模板A组");                       //提供在设置时编辑模板                      tempDef = new TemplateDefinition(this, "Template A1",                          ctl, "Template1", false);                       tempGroup.AddTemplateDefinition(tempDef);                                          tempDef = new TemplateDefinition(this, "Template A2",                          ctl, "Template2", false);                       tempGroup.AddTemplateDefinition(tempDef);                                  col.Add(tempGroup);                       // 创建模板分组二                      tempGroup = new TemplateGroup("模板B组");                      tempDef = new TemplateDefinition(this, "Template B1",                          ctl, "Template3", true);                      tempGroup.AddTemplateDefinition(tempDef);                      tempDef = new TemplateDefinition(this, "Template B2",                          ctl, "Template4", true);                      tempGroup.AddTemplateDefinition(tempDef);                      col.Add(tempGroup);                  }                   return col;              }          }

这里注意TemplateDefinition构造函数的***一个属性,true则在设计时编辑只能添加服务器控件

初始化启用设计时模板编辑

我们还需要在Initialize方法中调用SetViewFlags方法启用设计时模板编辑

public override void Initialize(IComponent component)  {         base.Initialize(component);         SetViewFlags(ViewFlags.TemplateEditing, true);  }

提供默认矩形标识符,为控件提供说明

如下图,DataList默认情况下给予如下提示

ASP.NET控件设计时操作列表与模板编辑的示例分析

我们可以通过重写GetDesignTimeHtml方法调用CreatePlaceHolderDesignTimeHtml方法创建一个矩形标识符来实现

public override string GetDesignTimeHtml()  {      return CreatePlaceHolderDesignTimeHtml("右击或选择编辑模板面板来编辑模板内容");  }

好了,完成了,接着要做的就是与相关模板控件关联起来了

平时大家都太忙了,上面功能有跟没有没多大关系,不过常用控件属性和功能,有设计时支持一定会让使用的更加有效.

以上是“ASP.NET控件设计时操作列表与模板编辑的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯