[Web服务器控件] - ImageSlide(一)

 

这是一个服务器端控件,vs2005/.net2.0开发。该控件通过服务器端程序,将指定(磁盘或http)的图片进行裁切后,讲图片、缩略图地址及javascript代码返回到客户端,并在浏览器中构建一个动画(淡出淡入)方式切换的图片轮显单元。

服务器端文件包含一份图片裁切代码(ThumbMaker.cs)和一份服务器控件构建代码(ImageSlide.cs)。先从简单的ThumbMaker说起:

WEB要显示的图片,必须有一个实体。或者说,服务器上必须存在那样一个文件。并且我比较讲究效果,并不想直接显示原图,所以,处理后的图片,必须要保存到服务器端。ThumbMaker就是做这个工作的,它可以处理两类文件:本地的,和HTTP的。本地不必多讲了,http图片就是先下载保存本地,而后按本地图片处理。判断的方式是使用URI。

if  (uri.IsFile)
{
    FileInfo fi 
=   new  FileInfo(url);
    
// other code  
}
else
{
    
using  (MK.Download d  =   new  Download(uri))
    {
        d.Get();
        Image i 
=  Image.FromStream(d.ResultStream);
        
// other code
    }

} 

下载和图片处理的程序都写成工具封装了,所以这份代码主要是处理url格式、判断web文件夹物理位置和创建文件夹等等一些周边的工作。

再说ImageSlide.cs

public   class  ImageSlide : WebControl, INamingContainer

继承INamingContainer,是为了在页面上拖拽多个控件时自动区别命名。

首先定义几个布局方面所需的属性

ContractedBlock.gif ExpandedBlockStart.gif Code
[Bindable(true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"主图片宽度(px)")]
[DefaultValue(
400)]
[Localizable(
true)]
public int MainImageWidth
{
    
get
    {
        
object o = ViewState["MainImageWidth"];
        
if (o == nullreturn 400;
        
try { return (int)o; }
        
catch { return 400; }
    }
    
set
    {
        ViewState[
"MainImageWidth"= value;
    }
}
[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"主图片右侧间隙")]
[DefaultValue(
3)]
[Localizable(
true)]
public int MainImageMarginRight
{
    
get
    {
        
object o = ViewState["MainImageMarginRight"];
        
if (o == nullreturn 3;
        
try { return (int)o; }
        
catch { return 3; }
    }
    
set
    {
        ViewState[
"MainImageMarginRight"= value;
    }
}
[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"缩图间隙")]
[DefaultValue(
3)]
[Localizable(
true)]
public int ThumbImageMargin
{
    
get
    {
        
object o = ViewState["ThumbImageMargin"];
        
if (o == nullreturn 3;
        
try { return (int)o; }
        
catch { return 3; }
    }
    
set
    {
        ViewState[
"ThumbImageMargin"= value;
    }
}
[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"索引按钮高度")]
[DefaultValue(
20)]
[Localizable(
true)]
public Unit IndexTableHeight
{
    
get
    {
        
object o = ViewState["IndexTableHeight"];
        
if (o == nullreturn Unit.Pixel(20);
        
try { return (Unit)o; }
        
catch { return Unit.Pixel(20); }
    }
    
set
    {
        ViewState[
"IndexTableHeight"= value;
    }
}
[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"索引按钮高度")]
[DefaultValue(
0)]
[Localizable(
true)]
public Unit IndexTableOffset
{
    
get
    {
        
object o = ViewState["IndexTableOffset"];
        
if (o == nullreturn Unit.Pixel(0);
        
try { return (Unit)o; }
        
catch { return Unit.Pixel(0); }
    }
    
set
    {
        ViewState[
"IndexTableOffset"= value;
    }
}
[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"标题栏背景颜色")]
[Localizable(
true)]
public System.Drawing.Color TextBarBackColor
{
    
get
    {
        
object o = ViewState["TextBarBackColor"];
        
if (o == nullreturn System.Drawing.Color.FromArgb(0x330x330x33);
        
return (System.Drawing.Color)o;
    }
    
set
    {
        ViewState[
"TextBarBackColor"= value;
    }
}

[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"标题字数限制")]
[DefaultValue(
20)]
[Localizable(
true)]
public int TextLengthLimit
{
    
get
    {
        
object o = ViewState["TextLengthLimit"];
        
if (o == nullreturn 20;
        
try { return (int)o; }
        
catch { return 20; }
    }
    
set
    {
        ViewState[
"TextLengthLimit"= value;
    }
}

[Bindable(
true)]
[Category(
"MK.Control.ImageSlide")]
[Description(
"主图片容器颜色")]
[Localizable(
true)]
public System.Drawing.Color MainImageColor

{
    
get
    {
        
object o = ViewState["MainImageColor"];
        
if (o == nullreturn System.Drawing.Color.FromArgb(0xfa0xfa0xfa);
        
return (System.Drawing.Color)o;
    }
    
set
    {
        ViewState[
"MainImageColor"= value;
    }
}

由于一张图片包括服务器位置(或http地址)、说明文字及字数超长限制、文字颜色、大图尺寸、小图尺寸等多个属性,所以定义了一个ImageItem对象,来集中存储所有这些信息。下面是这个子类的完整代码,非常简单的一个隐藏的控件。

ContractedBlock.gif ExpandedBlockStart.gif Code
[DesignTimeVisible(false)]
[ToolboxData(
"<{0}:ImageItem runat=server></{0}:ImageItem>")]
public class ImageItem : WebControl
{
    
private string _OriginalImageUrl = String.Empty;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public string OriginalImageUrl
    {
        
get { return _OriginalImageUrl; }
        
set { _OriginalImageUrl = value; }
    }

    
private string _ThumbImageUrl = String.Empty;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public string ThumbImageUrl
    {
        
get { return _ThumbImageUrl; }
        
set { _ThumbImageUrl = value; }
    }

    
private string _ViewImageUrl = String.Empty;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public string ViewImageUrl
    {
        
get { return _ViewImageUrl; }
        
set { _ViewImageUrl = value; }
    }

    
private string _HRef = String.Empty;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public string HRef
    {
        
get { return _HRef; }
        
set { _HRef = value; }
    }

    
private string _Text = String.Empty;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public string Text
    {
        
get { return _Text; }
        
set { _Text = value; }
    }

    
private int _TextLimit;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public int TextLimit
    {
        
get { return _TextLimit; }
        
set { _TextLimit = value; }
    }
    
public string LimitText
    {
        
get
        {
            
if (_Text.Length <= _TextLimit) return _Text;
            
return _Text.Substring(0, _TextLimit) + "";
        }
    }

    
private int _Offset;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public int Offset
    {
        
get { return _Offset; }
        
set { _Offset = value; }
    }

    
private Unit _ThumbWidth = new Unit();
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public Unit ThumbWidth
    {
        
get { return _ThumbWidth; }
        
set { _ThumbWidth = value; }
    }

    
private Unit _ThumbHeight = new Unit();
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public Unit ThumbHeight
    {
        
get { return _ThumbHeight; }
        
set { _ThumbHeight = value; }
    }

    
private Unit _ViewHeight = new Unit();
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public Unit ViewHeight
    {
        
get { return _ViewHeight; }
        
set { _ViewHeight = value; }
    }

    
private Unit _ViewWidth = new Unit();
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public Unit ViewWidth
    {
        
get { return _ViewWidth; }
        
set { _ViewWidth = value; }
    }

    
internal void Deal()
    {
        ThumbMaker.DealImageItem(
this);
    }
    
private int _TextBarOffset;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public int TextBarOffset
    {
        
get { return _TextBarOffset; }
        
set { _TextBarOffset = value; }
    }
    
private Unit _TextBarHeight;
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
public Unit TextBarHeight
    {
        
get { return _TextBarHeight; }
        
set { _TextBarHeight = value; }
    }
    [Category(
"MK.Control.ImageSlide.ImageItem")]
    
private System.Drawing.Color _TextBarBackColor = System.Drawing.Color.FromArgb(0x330x330x33);
    
public System.Drawing.Color TextBarBackColor
    {
        
get
        {
            
return _TextBarBackColor;
        }
        
set
        {
            _TextBarBackColor 
= value;
        }
    }
    
private HtmlAnchor _ViewImage;
    
internal HtmlAnchor ViewImage
    {
        
get
        {
            
if (_ViewImage == null) _ViewImage = new HtmlAnchor();
            
if (_ViewImageUrl != String.Empty)
            {
                HtmlImage hi 
= new HtmlImage();
                hi.Src 
= _ViewImageUrl;
                hi.Style[HtmlTextWriterStyle.BorderWidth] 
= "0px";
                HtmlGenericControl textBar 
= new HtmlGenericControl("div");
                textBar.InnerText 
= LimitText;
                textBar.Style[HtmlTextWriterStyle.Height] 
= _TextBarHeight.ToString();
                textBar.Style[HtmlTextWriterStyle.Width] 
= String.Format("{0}px", (int)(_ViewWidth.Value - 5));
                textBar.Style[HtmlTextWriterStyle.Position] 
= "relative";
                textBar.Style[HtmlTextWriterStyle.MarginTop] 
= String.Format("-{0}px", _TextBarOffset);
                textBar.Style[HtmlTextWriterStyle.BackgroundColor] 
= System.Drawing.ColorTranslator.ToHtml(_TextBarBackColor);
                textBar.Attributes.Add(
"class""ImageSlite_TitleBar");
                _ViewImage.Controls.Add(hi);
                _ViewImage.Controls.Add(textBar);

                _ViewImage.HRef 
= HRef;

                _ViewImage.Target 
= "_blank";
                _ViewImage.Style[HtmlTextWriterStyle.BorderWidth] 
= "0px";
                _ViewImage.Style[HtmlTextWriterStyle.Display] 
= "block";
                _ViewImage.Style[HtmlTextWriterStyle.Overflow] 
= "hidden";
            }
            
else
            {
                _ViewImage.InnerText 
= _Text;
            }
            _ViewImage.Attributes[
"title"= Text;
            
return _ViewImage;
        }
    }
    
private HtmlAnchor _ThumbImage;
    
internal HtmlAnchor ThumbImage
    {
        
get
        {
            
if (_ThumbImage == null) _ThumbImage = new HtmlAnchor();
            
if (_ThumbImageUrl != String.Empty)
            {
                HtmlImage hi 
= new HtmlImage();
                hi.Src 
= _ThumbImageUrl;
                hi.Style[HtmlTextWriterStyle.BorderWidth] 
= "0px";
                _ThumbImage.Controls.Add(hi);
            }
            
else
            {
                _ThumbImage.InnerText 
= LimitText;
            }
            _ThumbImage.Style.Value 
= Style.Value;
            _ThumbImage.Style[HtmlTextWriterStyle.Display] 
= "block";
            _ThumbImage.HRef 
= HRef;
            _ThumbImage.Target 
= "_blank";
            _ThumbImage.Attributes[
"title"= Text;
            
return _ThumbImage;
        }
    }

    
protected override void Render(HtmlTextWriter writer)
    {
        
if ((int)ThumbWidth.Value > 0)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Href, _HRef);
            writer.AddAttribute(HtmlTextWriterAttribute.Title, _Text);
            
//writer.AddAttribute(HtmlTextWriterAttribute.Style, String.Format("display:block;width:{0};height:{1}", _ThumbWidth, _ViewHeight));
            writer.RenderBeginTag(HtmlTextWriterTag.A);
            writer.AddAttribute(HtmlTextWriterAttribute.Src, _ThumbImageUrl);
            writer.RenderBeginTag(HtmlTextWriterTag.Img);
            writer.RenderEndTag();
            writer.RenderEndTag();
        }
    }
}

下面是一个稍微复杂的问题,就是以集合的方式在ImageSilde内存储ImageItem。不过随着时间推移,现在类似的文章越来越多了,其实也很容易GOOGLE到答案。不过那些文章大部分是用ArrayList来存储。出于C#类型安全的初衷,我使用泛型来存储集合。

下面是ImageSlide中的ImageItem集合设置:

private  List < ImageItem >  _ImageItemList;
[Bindable(
true )]
[Category(
" MK.Control.ImageSlide " )]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[Editor(
typeof (System.ComponentModel.Design.CollectionEditor),  typeof (System.Drawing.Design.UITypeEditor))]
[NotifyParentProperty(
true )]
public  List < ImageItem >  ImageItemList
{

    
get
    {
        
if  (_ImageItemList  ==   null ) { _ImageItemList  =   new  List < ImageItem > (); }
        
return  _ImageItemList;
    }
}

关键部分的内容,就是这些了。下一篇讲叙述该控件的js部分的内容。

转载于:https://www.cnblogs.com/muse/articles/1441193.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4.1 使用控件显示文本 实例 显示密码格式文本 实例 显示长日期格式时间 实例 显示金额格式文本 4.2 使用控件显示图片 实例 显示验证码图片 实例 动态显示用户头像 实例 使用网页对话框显示图片 实例 实现上传图片 实例 GridView控件显示商品缩略图 4.3 控件的超级链接 实例 ImageButton按钮超级链接查看商品详细信息 实例 GridView控件中使用超级链接模板列查看详细信息 实例 DataList控件模板中使用LinkButton查看详细信息 4.4 下拉列表框的应用 实例 间接改变DropDownList当前选项 实例 实现多个DropDownList控件的联动 实例 动态添加、删除DropDownList控件选项 4.5 单选按钮的应用 实例 性别选择 实例 网络考试系统中单选题答案的选择 4.6 复选框的应用 实例 登录身份选择 实例 网络考试系统中多选题答案的选择 4.7 控件连接数据源 实例 通过向导配置AccessDataSource 实例 通过向导配置SqlDataSource 实例 通过向导配置XmlDataSource 4.8 GridView控件的应用 实例 数据绑定并实现分页功能 实例 选中、编辑、取消、删除数据项 实例 GridView实现正反双项排序功能 实例 GridView控件中DropDownList控件的绑定 实例 通过CheckBox删除选中记录 实例 删除GridView控件行信息弹出确认提示框 实例 在GridView控件中实现自动编号 实例 GridView控件实现主细表 实例 查看当前页详细信息 实例 单元格中指定字符串固定长度 实例 供求信息网审核发布信息 实例 根据学生成绩合格与不合格显示不同颜色 4.9 DataList控件的使用 实例 绑定数据并实现分页 实例 编辑DataList控件模板显示员工信息 实例 DataList控件实现主细表 实例 DataList控件实现删除功能 4.9 Repeater控件的使用 实例 Repeater控件数据绑定 实例 Repeater控件分页 实例 编辑Repeater控件标识商品信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值