本文目录一览:
开发Eclipse下的自定义控件[3]
addMouseListener(new MouseListener() {public void mouseDoubleClick(MouseEvent e) {}public void mouseDown(MouseEvent e) {int row = (e y cy) / lineHeight; //计算选中的行if (row = ) {oldRowSel = rowSel;rowSel = row;}if (oldRowSel != rowSel) { // 重画旧的和新的选择项((Canvas) e getSource()) redraw(cx (e y / lineHeight)* lineHeight maxX lineHeight false);((Canvas) e getSource()) redraw(cx (oldRowSel + cy/ lineHeight)* lineHeight maxX lineHeight false);}selectionChanged();}public void mouseUp(MouseEvent e) {}});
当我们的控件获得焦点时 选中的列表项需要有虚框表示控件得到焦点 当获得或失去焦点是 我们这里只需要简单的通知选中的项重画
addFocusListener(new FocusListener() {public void focusGained(FocusEvent e) {((Canvas) e getSource()) redraw(cx rowSel * lineHeight maxX lineHeight true);}public void focusLost(FocusEvent e) {((Canvas) e getSource()) redraw(cx rowSel * lineHeight maxX lineHeight true);}}); -控件开发
我们在绘制每一个列表项时可以加入判断当前控件是否得到焦点 如果控件得到了焦点 我们就在选中的项目上画一个虚框 下面是我们绘制一个列表项的代码 注意在代码的最后绘制焦点的虚框
void onPaint(GC gc int row int beginx int beginy boolean isSelected) {Color initColor = gc getBackground();Color initForeColor = gc getForeground();if (isSelected) {gc setBackground(Display getCurrent() getSystemColor(SWT COLOR_LIST_SELECTION));gc fillRectangle(beginx beginy maxX lineHeight);gc setForeground(Display getCurrent() getSystemColor(SWT COLOR_LIST_SELECTION_TEXT));} else {gc setBackground(initColor);}gc drawString((String) colorNames get(row) beginx + beginy);Color color = Display getCurrent() getSystemColor(((Integer) colors get(row)) intValue());gc setBackground(color);gc fillRectangle(beginx + beginy + lineHeight );gc setBackground(initColor);gc setForeground(initForeColor);if (isFocusControl() isSelected)gc drawFocus(cx beginy maxX lineHeight);} -控件开发
lishixinzhi/Article/program/Java/ky/201311/28984
Asp.net控件开发----控件开发基础
服务器控件开发基础
当开发一个服务器控件时 首先要明白其内部的工作机理 其实在页面内部每一点由返回的HTML代码无论是简单的span标签 或者是button按钮 或者是复杂的gridview控件 都是由继承自System Web UI Control的对象生成的 -控件开发
控件的属性
控制控件的方法大多是通过控件的属性来操作的 通过控制服务器控件的属性 就可以相应的改变服务器生成的
下面是一个服务器控件的属性:
在Visual Studio里 当通过属性窗口来改变控件的属性时 VS会自动将属性添加到对应的aspx的HTML里 而在内添加属性时 在属性窗口里也会对应显示更改过的属性视图比如
asp:Button ID= Button runat= server Text= Button CommandName= cName /
在属性窗口里会对应显示 如下图
当然某些控件的属性会略有不同 比如常用的Label控件
asp:Label ID= Label runat= server 这里是Text属性/asp:Label
在开始符号和结束符号之间的内容会被设置成Text属性
当然 最实用也是我们最常用的是通过C#以编程的方式动态的修改控件的属性 这就不说了
控件的方法
控件通过方法来操作更加复杂的控件操作 通常在控件的方法内部会有很复杂的过程 一般包括几个内部函数和属性的组合 比如
private void LoadDropDownList()
{
ArrayList list = new ArrayList();
list Add( Hello );
list Add( Goodbye );
GridView DataSource = list;
GridView Databind();
}
这样 通过调用Databind()方法 就可以讲gridview和数据源进行绑定
控件的事件
控件通过事件来通知其它类或者客户端其内部的某个状态被改变 事件是一种灵活的机制 当控件与客户端进行交互的时候 事件会通过Http Post方法和服务器进行交互 通过自动回传机制 WEB开发中的事件表现起来就会像开发Windows FORM程序一样(当然 速度是无法和Form相比的)-控件开发
在Visual Studio中 可以在属性窗口中通过黄色的闪电图标来显示和控制控件的事件 如下
当双击相应的事件后 会在后台产生默认的处理方法 命名规则为 控件名_事件名
WEB Page 本质是一个控件树
在aspx页面的头部将Trace= true 设置到Page后 页面会显示相应的追踪信息 在Control Tree那一节 你会发现整个页面其实就是一个控件树 如图:
根控件?
OK 既然页面的本质是一个控件树 按照C#是完全面向对象的语言惯例(所有的一切都是继承于System Object) 那么所有控件共同的父类是什么?
在中 所有的控件被分布在 个主要命名空间中 分别为
System Web UI
System Web UI WebControls
System Web UI HtmlControls
它们之间的关系如下图所示
System Web UI 命名空间
lishixinzhi/Article/program/net/201311/12910
.net WinForm用户控件开发:用户控件弹出式属性设置
这一节给大家演示下怎样使属性值以弹出式对话框的形式显示出来 先来看下效果图
这里我们定义一个用户控件 并为用户控件设置一个属性 使用弹出式对话框为属性设置值
定义属性ShowPropery
代码如下
public partial class UCLab : UserControl { public UCLab() { InitializeComponent(); } private string showpropery; [Description( 弹出属性 )] [Editor(typeof(ShowTypeDialogEditor) typeof(UITypeEditor))] public string ShowPropery { get { return showpropery; } set { showpropery = value; } } -控件开发
}
然后我们为属性设置弹出式属性编辑器 需要继承UITypeEditor类 代码如下
/// summary /// 弹出式编辑器 /// /summary public class ShowTypeDialogEditor : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { if (context!=nullcontext Instance!=null) { return UITypeEditorEditStyle Modal;//显示一个省略号 } return base GetEditStyle(context); } public override object EditValue(ITypeDescriptorContext context IServiceProvider provider object value) { System Windows Forms Design IWindowsFormsEditorService editorService = null; if (context!=nullcontext Instance!=nullprovider!=null) { editorService =(System Windows Forms Design IWindowsFormsEditorService)provider GetService(typeof(System Windows Forms Design IWindowsFormsEditorService)); if (editorService!=null) { UCLab uclab =(UCLab)context Instance; ShowForm sf = new ShowForm(uclab ShowPropery); if (sf ShowDialog()==DialogResult OK) { value = sf Result; return value; } } } //return base EditValue(context provider value); return value; } }-控件开发
这样我们把用户控件拖到界面上 就可以设置属性了
lishixinzhi/Article/program/ASP/201311/21730