惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

博客园 - 吕艳阳

asp.net 重新启动应用程序 eWebEditor在线文本编辑器最新版(V4.6) 用DataReader 分页与几种传统的分页方法的比较 CodeSmith实体类模板 Oracle中取余的方法 (转)C#新特性:可空类型 (转)asp.net自定义控件(数据绑定) javascript事件列表解说 返回数据库内所有表的字段 网线水晶头的接法 Access密码破解工具 简单介绍一下asp.net中DataGrid的使用(视频教程) Asp.net中文件的上传和下载(视频教程) 如何在asp中,使用vb来开发dll组件 (提供视频下载) 操作系统常用技巧 Oracle9i 用户登录存储过程 Oracle 冷备份操作 Oralce9i 获取单个字段的值 Oracle 9i 返回一个记录集的方法
(转)asp.net控件设计时支持(3)
吕艳阳 · 2008-09-24 · via 博客园 - 吕艳阳
       

示例代码

       都已经忘了更新了,感觉非常愧疚啊.现在努力补上

上篇很偷懒的写了自动格式设置.

把没讲完的补上.

一.智能标记

先看一张图.

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

下面来看看如何实现

1.重写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;
            }

        }
  
    }

2.CustomControlActionList 自定义项列表

2.1项列表分类

(1)标题面板
(2)属性面板
(3)方法面板

类图如下

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

2.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定义属性,方法也相同,代码如下


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

[DesignerAttribute(typeof(SampleControlDesigner))]

二.模板编辑器

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

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

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

添加步骤跟表格的添加类似,td add tr然后table add td
模板则是TemplateGroup add TemplateDefinition 然后TemplateGroupCollection add TemplateGroup

代码如下

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

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

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

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

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

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

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

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

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

先写到这里,估计大家也不会可以留意这方面的东西,平时大家都太忙了,上面功能有跟没有没多大关系,不过常用控件属性和功能,有设计时支持一定会让使用的更加有效. 明天继续写

本文转自 http://www.cnblogs.com/Clingingboy/archive/2007/05/14/739462.html Clingingboy