自定义控件

C#

老子叫甜甜 提交于 2020-03-01 16:33:21
一、写在前面 在工作中需要实现一个场景,有一个名单类的数据需要维护,这个维护工作需要有一个复核功能,为了方便复核时对名单变更情况有一个良好的掌握,需要做一个便跟前后名单的对比功能。 功能实现后效果如下图: 其中,修改前名单、修改后名单、前后名单对比三个部分都使用了封装后的ListView控件保存数据 二、步骤一:封装ListView 封装ListView主要是为了保证对“前后名单对比”部分数据的着色。虽然微软原生的ListView就支持了对数据项进行着色,但因为“前后名单对比”部分使用了分组功能,点击分组标题时,默认选中分组内的全部数据,这回导致分组内的数据颜色都变为黑色。为改变这一情况,我们需要创建一个继承ListView的类ListViewEnhanced,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace NameListComparer { class ListViewEnhanced : ListView { /// <summary> /// call SendMessage using

关于Dll中“没有可放置在工具箱的组件”的解决方案

余生颓废 提交于 2020-02-28 12:58:20
参考: http://www.tuicool.com/articles/yUJVNr 本文主要针对在VS2012的工具箱中,通过“选择项”添加自定义的Dll,如.NET类型时,出现“ 没有可放置在工具箱的组件 ”问题的常见解决方案。 问题描述: 解决方法: 【1】封装的Dll有问题 1. 编写控件库的扩展类时, 没有加public关键字 ,如: public class MyListView: System.Windows.Forms.ListView { public MyListView() { } } 如果去掉 public 也可以生成DLL,但当你把它添加到用户控件时就会提示该错误。 2. 编写控件库的扩展类时, 没有空的构造函数 ,即使如果存在带参数的构造函数也应存在空的构造函数,如: public class FirstControl : Control { public FirstControl() { } public FirstControl(string strTitle) { } } 【2】高版本的VS2012有问题 vs2012和2010添加控件一样的,选择项->浏览->选择组件类型->浏览->选择DLL。。。 但在vs2010可以识别dll里的控件,但vs2012却出现“没有可放置在工具箱上的组件”的问题,这是有个简单的解决方法:

android--------自定义控件 之 方法篇

痴心易碎 提交于 2019-12-10 07:41:02
前面简单的讲述了Android中自定义控件的理论和流程图,今天通过代码来详细的讲解一下其中的方法 首先先创建一个类 CircularView 继承于 View,之后实现构造方法(初始化步骤) public class CircularView extends View { public CircularView(Context context) { super(context); } public CircularView(Context context, AttributeSet attrs) { super(context, attrs); } public CircularView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public CircularView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } } View的构造函数有四种重载,View构造函数的参数有多有少, 有四个参数的构造函数在API21的时候才添加上

WPF自定义组件开发实践

一个人想着一个人 提交于 2019-12-09 04:00:44
WPF自定义组件开发实践 WPF是微软最新的桌面应用程序框架,拥有与过去的Windows Form技术相近的功能,全面支持组件化开发技术。本文是对在WPF应用程序中使用组件化技术的一个简要介绍。 在.NET平台上,程序集是最基本的软件组件。程序集有两种用得最广的类型,一种是用于封装业务逻辑的中间层组件,另一种是可视化的界面组件(如各种控件)。 中间层组件的开发方式非常简单,使用Visual Studio创建一个类库,编译生成DLL。在新的项目中引用此DLL即可创建定义在此程序集中的类的对象。这个技术在传统的.NET应用程序中被广泛应用,大家都非常熟悉了。我就不浪费笔墨了。 下面着重介绍一下大家可能还不熟悉的WPF界面层组件。 WPF界面层组件主要有两种类型:WPF用户控件和WPF自定义控件。 默认情况下,Visual Studio指定WPF用户控件的基类是UserControl,WPF自定义控件的基类是Control。两者本质是一样的,只不过用户控件提供有一个XAML文件用于定制外观,使用起来非常方便,可以使用Blend等工具直接生成你所需要外观,而自定义控件一般要求你完全从头开始定制控件的外观,多用于实现Visual Studio标配控件所不具备的特殊功能和行为。 以一个例子来说明这两种控件的使用方法。 1 在Visual Studio中创建一个“WPF自定义控件库”项目: 2

Android自定义RatingBar(评分控件)

☆樱花仙子☆ 提交于 2019-12-07 02:05:26
RatingBar简单介绍 RatingBar是基于 SeekBar (拖动条)和 ProgressBar (状态条)的扩展,用星形来显示等级评定, 在使用默认RatingBar时,用户可以通过触摸/拖动/按键(比如遥控器)来设置评分, RatingBar自带有两种模式 ,一个小风格 ratingBarStyleSmall ,大风格为 ratingBarStyleIndicator , 大的只适合做指示,不适用与用户交互。 黄色星形为 自定义RatingBar 小绿色为自带的 ratingBarStyleSmall 大绿色为自 带的 ratingBarStyleIndicator 通过设置 style="XXXXXXXXXXXXX" 进行设置切换(比如: style="?android:attr/ratingBarStyleIndicator" ) 自定义RatingBar需要注意的地方 一般情况下,系统自带的RatingBar是远远无法满足开发需求的,我们根据图片自定一个RatingBar,在开始实现自定义RatingBar之前,顺带说一下res目录下图片放置目录的区别: 在android sdk 1.5版本之前res目录下面只有一个drawable一个目录,在android sdk 1.6版本以后就出现了三个目录,分别是 drawable-hdpi、drawable-ldpi

100行lua代码实现简单目录浏览器

孤街醉人 提交于 2019-12-04 23:23:49
lae下载地址: https://github.com/ouloba/laetool.git lae下载地址(国内): https://pan.baidu.com/s/1ckMy0Q 相关视频: http://www.tudou.com/listplay/aly7NDWz_sQ/AaqZ81jIt-k.html 教程: lae界面开发工具入门介绍之一<新建工程篇> lae界面开发工具入门之介绍二--<渲染组件篇> lae界面开发工具入门之介绍三--<布局篇> lae界面开发工具入门之介绍四--<秘籍篇-拷贝粘贴> lae界面开发工具入门之介绍五--<秘籍篇-杂项> lae界面开发工具入门之介绍六--<秘籍篇-状态篇> 关于lae工具问题单独介绍! --lua代码 lua编辑器 csdn下载 github下载地址,csdn没有更新版本功能,这里改为git,可实时获得最新的版本 下载地址: --目录浏览器下载地址 https://github.com/ouloba/folder-explorer.git --辅助接口 LXZDoFile("LXZHelper.lua"); LXZDoFile("serial.lua"); --每帧调用,root窗口status中IsActive设置为true,即可触发OnUpdate事件。 local function OnUpdate(window,

android--------自定义控件 之 基本流程篇

ぃ、小莉子 提交于 2019-12-04 07:10:02
在我们平常的Android开发中经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件 自定义控件可以设计出很多你想要的功能和模块,在开发中是很重要的一部分。 自定义View的价值 能够做到基础控件无法做到的效果,为应用的表现增色; 在多个应用并行开发的团队,将公用的交互效果提取成自定义控件,方便复用,减少不必要的重复劳动; 将控件的内部逻辑封装在自定义View中,便于应用内解耦; 流程图: 自定义控件两种方式: 1. 继承ViewGroup 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout,包含有子View。 例如:ViewGroup、LinearLayout、FrameLayout、RelativeLayout等。 2. 继承View 在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View,不包含子View。 例如:View、TextView、ImageView、Button等。 View的三大核心方法onMeasure、onLayout、onDraw onMeasure: 用于测量视图的大小; onLayout: 用于给视图进行布局; onDraw: 用于对视图进行绘制;

android面试常见的handler机制 AIDL机制 高级控件UI 内存优化

大憨熊 提交于 2019-12-03 21:50:25
1,handler机制 在android中的一个异步回调,一个handler允许发送和处理message和runable对象,这些对象和一个线程的MessageQueue相关联。每一个线程实例和一个单独的线程以及线程messageQueue相关联。每一个消息都要制定一个handler,通过Handler创建消息便可以完成此功能,将引入到消息队列中。UI主线程创建一个handler是通过threadlocal创建一个looper,这个looper和主线程一一对应,使用threadlocal是保证每一个线程唯一个looper,可以直接使用,初始化looper的时候创建一个messageQueue,主线程,消息循环,消息队列。Hander持有对UI主线程消息队列MessageQueue和消息循环Looper的引用,子线程可以通过Handler将消息发送到UI线程的消息队列MessageQueue中。 2,AIDL android interface define language 是进程间的通信,activity和service之间和在不同service之间的通信。 IPC机制是面向接口的,它是使用代理类在客户端和实现端传递数据,使用AIDL实现IPC服务的步骤是:1. 创建.aidl文件-该文件(YourInterface.aidl)定义了客户端可用的方法和数据的接口。2.

android--------自定义控件 之 属性篇

白昼怎懂夜的黑 提交于 2019-12-03 04:43:18
上篇介绍了自定义控件的一个简单案例,本篇文章主要介绍如何给自定义控件自定义一些属性。 Android 中使用自定义属性的一般步骤: 定义declare-styleable,添加attr 使用TypedArray获取自定义属性 设置到View上 自定义属性都存在于/value/attr.xml文件中,以如下格式存在 <resource> <declare-styleable name="自定义属性名称"> <attr name="属性名称" format="属性种类"/> ...... </declare-styleable> </resource> format属性值: reference:引用资源 string:字符串 Color:颜色 boolean:布尔值 dimension:尺寸值 float:浮点型 integer:整型 fraction:百分数 enum:枚举类型 flag:位或运算 代码说话: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CircularAttrsView"> <!--圆形绘制的位置--> <attr name="circular_circle_gravity"> <flag name="left" value="0"/> <flag name=

android--------自定义控件 之 基本实现篇

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 04:43:05
前面简单的讲述了Android中自定义控件中的几个方法,今天通过代码来实现一个简单的案例 自定义一个扇形图 自定义控件示例: 这里先介绍继承View的方式为例 public class CircularView extends View { /**** * 有三个参数的构造函数中第三个参数是默认的Style, * 这里的默认的Style是指它在当前Application或Activity所用的Theme中的默认Style,且只有在明确调用的时候才会生效, */ private final static String TAG = CircularView.class.getName(); private Paint mPaint; private RectF oval; public CircularView(Context context) { super(context); init(); } public CircularView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CircularView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs,