RaUI/Source/ryControls/Controls/SuperPictureBox.cs
zilinsoft 3262955f2f ### 2023-11-07更新
------
#### RaUIV4    V4.0.2311.0701
- *.[全新]整合了MyDb、ryControls、MyDb_MySQL等dll文件到RaUI一个项目。
- *.[新增]新增ApkOp类,可以轻松获取APK信息。
- *.[新增]新增JsonExt扩展类,让Json操作更简单。
- *.[新增]新增WebP类,可以支持webp格式的图片。
- *.[改进]ryQuickSQL中的AddField方法改为自动替换已存在的同名值。
- *.[修复]ryQuickSQL中的AddFieldCalc方法无法正常计算的BUG。
2023-11-07 16:37:53 +08:00

118 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
namespace ryControls
{
/// <summary>
/// 超级图片控件,支持加载工程内部图片、异步加载网络图片
/// </summary>
public partial class SuperPictureBox : PictureBox
{
/// <summary>
/// 超级图片控件,支持加载工程内部图片、异步加载网络图片
/// </summary>
public SuperPictureBox()
{
InitializeComponent();
}
/// <summary>
/// 图片所在上级域名
/// </summary>
[Description("图片所在上级域名")]
public string ImageDomain { get; set; }
/// <summary>
/// 图片资源所在上级文件夹
/// </summary>
[Description("图片资源所在上级文件夹")]
public string ImageResFolder { get; set; }
/// <summary>
/// 根据不同前缀加载不同格式图片。i:表示工程内置图片;s:表示T_ImageDomain域名下的图片,u:表示指定url的图片;f:表示本地图片
/// </summary>
/// <param name="sUrl"></param>
public void LoadPicBySUrl(string sUrl)
{
string HeadStr = sUrl;
if (HeadStr.Length > 2)
{
string keyStr = HeadStr.Substring(0, 2);
if (keyStr == "i:")//内置
{
this.Image = ButtonImages.ImageObject.GetResBitmap(Application.ExecutablePath, ImageResFolder + HeadStr.Substring(2));
}
else if (keyStr == "s:") //服务器上的地址
{
LoadFromUrl(ImageDomain + HeadStr.Substring(2), true);
}
else if (keyStr == "u:") //URL地址
{
LoadFromUrl(HeadStr.Substring(2), true);
}
else if (keyStr == "f:") //本地图片
{
LoadFromFile(HeadStr.Substring(2));
}
}
}
private void LoadPic(string url)
{
Image image=null;
try
{
WebRequest webreq = WebRequest.Create(url);
WebResponse webres = webreq.GetResponse();
Stream stream = webres.GetResponseStream();
image = Image.FromStream(stream);
stream.Close();
}
catch { }
try
{
DateTime dt = DateTime.Now.AddSeconds(5);
while(!this.IsHandleCreated)
{
Thread.Sleep(10);
if (dt < DateTime.Now) { break; }
}
this.Invoke(new Action(() =>
{
this.Image = image;
}));
}
catch { }
}
/// <summary>
/// 加载本地图片,加载完毕不会占用本地图片
/// </summary>
/// <param name="path"></param>
public void LoadFromFile(string path)
{
this.Image = ryCommon.RyImage.LoadPic(path);
}
/// <summary>
/// 加载指定url图片
/// </summary>
/// <param name="url">url位置</param>
/// <param name="isAsyn">是否异步</param>
public void LoadFromUrl(string url, bool isAsyn)
{
if (isAsyn)
{
void starter() { LoadPic(url); }
new Thread(starter).Start();
}
else
{
LoadPic(url);
}
}
}
}