MultiMediaControl

在项目的过程中,我们经常需要显示flash image,视频等一些东西做为banner等。
这个时候我们希望有一个控件,像Image一样直要传给它ImageUrl就可以自动显示出合适的东西

[Designer("System.Web.UI.Design.WebControls.PreviewControlDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    [DefaultProperty(
"ImageUrl")]
    [ToolboxData(
"<{0}:MultiMedia runat=server></{0}:MultiMedia>")]
    
public class MultiMedia : Image
    
{

        
public FileType FileType = FileType.Other;


        
protected virtual void CalculateType()
        
{
            
if (!string.IsNullOrEmpty(ImageUrl))
            
{
                
int start = ImageUrl.LastIndexOf('.');
                
string type = ImageUrl.Substring(start, ImageUrl.Length - start).ToLower();
                
if (type == ".swf")
                
{
                    FileType 
= FileType.Flash;
                }

                
else
                
{
                    FileType 
= FileType.Image;
                }

            }

        }


        
protected override void Render(HtmlTextWriter writer)
        
{
            CalculateType();
            
switch(FileType)
            
{
                
case FileType.Image:
                    
base.Render(writer);
                    
break;
                
case FileType.Flash:
                    RenderFlash(writer);
                    
break;
            }

            
           
        }


        
public virtual void RenderFlash(HtmlTextWriter output)
        
{

            
string url = this.ResolveUrl(ImageUrl);
           
            output.Write(
"<embed src='"+url+"' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='"+this.Width+"' height='"+this.Height+"' wmode='Opaque'></embed>");

            
        
        }

    }


    
public enum FileType
    
{
        Image,
        Flash,
        Other,
    }

}

也许你发现了。什么在选择的时候没有发现*.swf 这个时候我们可以自己扩展
public class MediaUrlFilter : System.Web.UI.Design.UrlEditor
{

    
protected override string Filter
    
{
        
get
        
{
            
return "MultiType (*.swf *.jpg *.gif) |*.swf;*.gif;*.jpg;*.png|All files|*.*";
        }

    }

}


并重写
  [Editor(typeof(MediaUrlFilter),typeof(System.Drawing.Design.UITypeEditor))]
        
public override string ImageUrl
        
{
            
get
            
{
                
return base.ImageUrl;
            }

            
set
            
{
                
base.ImageUrl = value;
            }

        }
这样我们就可以发现了。

注意:System.Web.UI.Design 这个命名空间在 System.Design.dll里。需要使用browser把它加进来

一些需要用到的东西可以自己扩展

ADD:
   public virtual void RenderVideo(HtmlTextWriter output)
        
{
            output.NewLine 
= "\r\n";
            
string url = this.ResolveUrl(ImageUrl);
            output.Write(
"<embed src='"+url+"' border='0' width='"+this.Width+"' height='"+this.Height+"' type='application/x-mplayer2'></embed>");
        }

原文地址:https://www.cnblogs.com/lovebanyi/p/897449.html