用托管C++编写自定义Web组合控件

什么是自定义的组合控件

自定义的Web组合控件正如它名字说的那样:在单个控件中集成了一个或多个服务端程序及HTML控件。自定义的组合控件在功能上与用户控件非常类似,最大的不同之处是,它只存在于它自己的程序集中(或与其他控件共享),能被放在工具条中,并可提供它所包含控件的所见即所得视图方式。

另一方面,自定义Web组合控件比用户控件(user control)更加难创建,因为Visual Studio.NET的设计者们并没有提供可视化创建它们的任何工具,因此,问题是:为什么要用组合控件取代用户控件呢?当分发控件到多个Web程序或系统中时,如果使用自定义Web组合控件,情况要好得多,而用户控件最好用在不重视复用的地方,例如,如果只准备在你自己的网站中使用控件,那么用户控件可能会是更好的选择。基本上来说,你不得不在创建它所花的额外努力与从中所得到的可复用次数之间,作一权衡;同时,因为自定义组合控件只存在于它自己的程序集中,所以在每台电脑上,只需要一份拷贝,而用户控件则放置于Web程序集内,因此,必须存储在每一个使用它的Web网站上。

创建一个自定义Web组合控件

创建一个自定义Web组合控件的步骤,实质上与创建一个自定义的超类Web控件一样,本例中为SearchControl,第一件要做的事,是设计控件的外观,完成之后,看起来大致如图1所示。


图1:设计器中的控件外观

SearchControl,正如上面所看到的,由三个服务端控件组成(实际上有四个,后面将会说到):一个标签控件、一个文本框控件、一个按钮。另外,自定义Web组合控件中比较棘手的部分是它们并没有一个很好的拖放设计工具以支持创建控件,而需要以老方式--手工编写代码来完成。但是,也不完全正确,在此不必手工编写服务端或HTML控件代码,那怎样创建SearchControl的外观呢?

首先,在SearchControl类中写出三个服务端控件的定义:

Label *label;
TextBox *textbox;
Button *button;

接下来,在类的构造函数中创建它们的实例:

SearchControl::SearchControl()
{
 label = new Label();
 textbox = new TextBox();
 button = new Button();
}

最后,在类的CreateChildControls()方法中,把它们添加到一个自定义Web组合控件的子控件集合里:

void SearchControl::CreateChildControls()
{
 Controls->Add(label);
 Controls->Add(textbox);
 Controls->Add(button);
}

CreateChildControls()方法是从Control类继承来的一个虚方法,而WebControl也正是从Control类继承而来。

注意,在此并不需要Render()方法,因为组成组合控件的服务端与HTML控件能绘制自身,所以,你完全不用考虑此方法,或者在Render()方法中调用基类:

void SearchControl::Render(HtmlTextWriter *output)
{
 __super::Render(output);
}

时间: 2024-09-13 00:56:23

用托管C++编写自定义Web组合控件的相关文章

自定义view 组合控件,怎么自定义的属性attrs怎么在布局里提示不出来~

问题描述 自定义view 组合控件,怎么自定义的属性attrs怎么在布局里提示不出来~ 我在构造方法里引用了属性值TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs R.styleable.CustomView defStyle 0);使用控件的布局里也添加了xmlns:custom=""http://schemas.android.com/apk/res/完整包名"" 解决

Android中View自定义组合控件的基本编写方法_Android

有很多情况下,我们只要运用好Android给我提供好的控件,经过布局巧妙的结合在一起,就是一个新的控件,我称之为"自定义组合控件". 那么,这种自定义组合控件在什么情况下用呢?或者大家在做项目时候会发现,某些布局会被重复的利用,同一个布局的XML代码块会被重复的复制黏贴多次,这样会造成代码结构混乱不说,代码量也会增大,各种控件都需要在Java代码中被申明和处理相应的逻辑,工作量着实不小,所以,必须要找到一个合理的"偷懒"的方式,开动脑经去怎么简化以上说的不必要的麻烦

Android自定义View之组合控件实现类似电商app顶部栏_Android

本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下 效果图: 分析:左右两边可以是TextView和Button,设置drawableTop即可,中间的看着像是EditText,但是用过淘宝天猫等类似app的话会发现点击搜索不是在当前Activit进行搜索的,是跳转到另外的页面进行的,所以用TextView然后设置背景即可. 实现流程 参数列表: 设置属性文件:values下建立attrs.xml文件,添加需要自定义的属性. <?x

实例讲解Android应用中自定义组合控件的方法_Android

自定义view大概可以分成: 继承view 组合view 自己画的view(用paint和canvas) 自定义viewgroup(widget) 最近又跟同学聊起来了,于是就准备自己实现一个imagebutton来练练手.(最简单的了)以及后面一个把imageview与textview结合使用的案例. ImageButton要实现ImageButton最容易想到的不就是把button和imageview合在一起么.嗯,人容易就想到这是一个组合自定义view.可是如何把一个image放到butt

在Android开发中使用自定义组合控件的例子_Android

一.定义一个XML布局文件setting_item_view.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=

Android自定义View之组合控件实现类似电商app顶部栏

本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下 效果图: 分析:左右两边可以是TextView和Button,设置drawableTop即可,中间的看着像是EditText,但是用过淘宝天猫等类似app的话会发现点击搜索不是在当前Activit进行搜索的,是跳转到另外的页面进行的,所以用TextView然后设置背景即可. 实现流程 参数列表: 设置属性文件:values下建立attrs.xml文件,添加需要自定义的属性. <?x

利用picturebox、contextmenustrip和textbox设计一个新的组合控件

问题描述 我想把picturebox.contextmenustrip和textbox三个控件放在一个自定义的组合控件里面,没有写其余的代码,直接编译后,将该组合控件添加进工具箱.之后新建了一个winform窗体,在窗体里面调用该组合控件,发现该组合控件并没有picturebox的属性和方法,比如要在组合控件里面显示图片的功能.这个问题应该怎么解决?求有知道的大神帮助,小弟非常感谢!! 解决方案 解决方案二:本来就没有,你需要自己加上,比如:publicImageBackgroundImage{

Android Studio自定义组合控件

在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件.  本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太小了又  达不到很好的复用的效果.不过,这些不在本文的讨论范围,需要读者自己去开发的实践中体会. 实例项目就选择一个登录注册的组件,这组件包括用户名.密码的文本输入框,还有登录和注册的按钮.这里  主要是为了讲解的需要,在选择服用代码的力度上可以不用参考.  默认的当一个新的项目创建以后就会生成一个

Android自定义View 自定义组合控件

自定义组合控件: 以三国杀游戏武将为例,包括武将头像,血条,装备区 1.先定义该组合的XML文件布局 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="wrap_content" 4