精华内容
下载资源
问答
  • 图片 语音 右键头像 使用起来很简单,比如添加一条消息: chatBox.addChatBubble(ChatBox.BubbleSide.LEFT,"消息","用户昵称","用户id", @"头像图片"); 详情请看Github:...

    文字

    图片

    语音

    右键头像

     

    使用起来很简单,比如添加一条消息:

                chatBox.addChatBubble(ChatBox.BubbleSide.LEFT,"消息","用户昵称","用户id", @"头像图片");

    详情请看Github:https://github.com/kitman0000/LightTalkBubble

    展开全文
  • winform图片标尺控件

    2020-10-14 16:08:28
    最近要做个winform的东西,要在里面集成一个类似Windows自带画图的标尺功能,还要能在图片上画矩形。在网上找了好久也没找到写好的控件,无奈自己做了一个。 目前还有些bug,这里先做个分享。(Ps:很少做winform...

    (只是把以前在博客园写的内容粘贴到这来了,也是因为csdn的积分不够了,啊~~~!)

    下载链接:http://download.csdn.net/download/p690075426/10142184

    最近要做个winform的东西,要在里面集成一个类似Windows自带画图的标尺功能,还要能在图片上画矩形框。在网上找了好久也没找到写好的控件,无奈自己做了一个。

    目前还有些bug,这里先做个分享。(Ps:很少做winform的东西,做的不好,轻喷。另外欢迎指点。)

    由于最后要做的东西的背景是黑的,标尺就画成白的了,有需要的自己改吧。。

    直接上代码

    using Helper;
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace UserCtrl
    {
        public partial class RulerControl : UserControl
        {
            private double _monitorDPI = 100;
            /// <summary>
            /// 用于控制放大倍数
            /// </summary>
            private double _multiple = 1;
    
            /// <summary>
            /// 每多少个像素1格
            /// </summary>
            public double MonitorDPI
            {
                get
                {
                    return _monitorDPI;
                }
                set
                {
                    _monitorDPI = value;
                }
            }
            /// <summary>
            /// X轴偏移位置
            /// </summary>
            private float offSetX=0;
    
            /// <summary>
            /// Y轴偏移位置
            /// </summary>
            private float offSetY = 0;
    
            /// <summary>
            /// 开始位置X
            /// </summary>
            public double XStart
            {
                get;
                set;
            }
    
            /// <summary>
            /// 开始位置Y
            /// </summary>
            public double YStart
            {
                get;
                set;
            }
    
            /// <summary>
            /// 用户设置的原始图
            /// </summary>
            private Image _initImg = null;
    
    
    
            /// <summary>
            /// 图片
            /// </summary>
            public Image Image
            {
                get
                {
                    return Pic.Image;
                }
                set
                {
                    Pic.Image = value;
                    if (_initImg == null&&value!=null)
                    {
                        _initImg = PicHelper.GetNewPic(value, value.Width , value.Height );
                    }
                }
            }
            private Font font = new Font("宋体", 9); //刻度值显示字体
            public RulerControl()
            {
                InitializeComponent();
            }
    
            private void Pic_MouseWheel(object sender, MouseEventArgs e)
            {
                if (MouseButtons == MouseButtons.Left)
                {
                    return;
                }
                Image img = Pic.Image;
                if (img != null)
                {
                    if (e.Delta >= 0)
                    {
                        if (_multiple * 2 > 4)
                            return;
                        _multiple *= 2;
                    }
                    else
                    {
                        if (Pic.Width < this.Width - 50)
                            return;
    
                        _multiple *= 0.5;
                        if (Pic.Width <= (this.Width - 50))
                        {
                            XStart = 0;
                            YStart = 0;
                        }
                    }
                    DrawRect();
                    AdapterDpi();
                    ReDrawX();
                    ReDrawY();
                }
            }
    
            private void RulerControl_Paint(object sender, PaintEventArgs e)
            {
                P1.Height = 50;
                P1.Width = this.Width - 50;
                P2.Height = this.Height - 50;
                P2.Width = 50;
                P1.Location = new Point(50, 0);
                P2.Location = new Point(0, 50);
                PContainer.Location = new Point(50, 50);
            }
    
            private void RulerControl_Resize(object sender, EventArgs e)
            {
                P1.Height = 50;
                P1.Width = this.Width - 50;
                P2.Height = this.Height - 50;
                P2.Width = 50;
                P1.Location = new Point(50, 0);
                P2.Location = new Point(0, 50);
                PContainer.Location = new Point(50, 50);
            }
    
            /// <summary>
            /// 重画Y轴
            /// </summary>
            private void ReDrawY()
            {
                if (P2.BackgroundImage != null)
                {
                    P2.BackgroundImage.Dispose();
                }
                Bitmap bmpY = new Bitmap(P2.Width, P2.Height);
                using (Graphics g = Graphics.FromImage(bmpY))
                {
                    int originLocation = bmpY.Width - 1;
                    int startY = (int)Math.Ceiling(YStart);
                    offSetY = (float)(MonitorDPI * _multiple * (startY - YStart));
                    for (int i = startY; i <= Math.Ceiling(P2.Height / (MonitorDPI * _multiple) + YStart); i++)
                    {
                        float y = (float)(MonitorDPI * _multiple * (i - YStart)) + offSetY;
                        if (y >= 0)
                        {
                            PointF start = new PointF(originLocation, y);
                            PointF end = new PointF(originLocation - 3, y);
                            if (i % 5 == 0)
                            {
                                end = new PointF(originLocation - 6, y);
                            }
                            if (i % 10 == 0 && i != 0)
                            {
                                end = new PointF(originLocation - 12, y);
                                g.DrawString((i*MonitorDPI).ToString(), font, Brushes.White, new PointF(originLocation - 30, y - 5));
                            }
                            g.DrawLine(Pens.White, start, end);
                        }
                    }
                    g.DrawLine(Pens.White, new PointF(originLocation, 0), new PointF(originLocation, bmpY.Height));
                    P2.BackgroundImage = bmpY;
                }
            }
    
            /// <summary>
            /// 重画X轴
            /// </summary>
            private void ReDrawX()
            {
                if (P1.BackgroundImage != null)
                {
                    P1.BackgroundImage.Dispose();
                }
                Bitmap bmpX = new Bitmap(P1.Width, P1.Height);
                using (Graphics g = Graphics.FromImage(bmpX))
                {
                    int originLocation = bmpX.Height - 1;
                    int startX = (int)Math.Ceiling(XStart);
                    offSetX = (float)(MonitorDPI * _multiple * (startX - XStart));
                    for (int i = startX; i <= Math.Ceiling(P1.Width / (MonitorDPI * _multiple) + XStart); i++)
                    {
                        float x = (float)(MonitorDPI * _multiple * (i - XStart)) + offSetX;
                        if (x >= 0)
                        {
                            PointF start = new PointF(x, originLocation);
                            PointF end = new PointF(x, originLocation - 3);
                            if (i % 5 == 0)
                            {
                                end = new PointF(x, originLocation - 6);
                            }
                            if (i % 10 == 0 && i != 0)
                            {
                                end = new PointF(x, originLocation - 12);
                                g.DrawString((i*MonitorDPI).ToString(), font, Brushes.White, new PointF(x - 5, originLocation - 30));
                            }
                            g.DrawLine(Pens.White, start, end);
                        }
                    }
                    g.DrawLine(Pens.White, new PointF(0, originLocation), new PointF(bmpX.Width, originLocation));
                    P1.BackgroundImage = bmpX;
                }
            }
    
            private void RulerControl_Load(object sender, EventArgs e)
            {
                P1.Height = 50;
                P1.Width = this.Width - 50;
                P2.Height = this.Height - 50;
                P2.Width = 50;
                P1.Location = new Point(50, 0);
                P2.Location = new Point(0, 50);
                PContainer.Location = new Point(50, 50);
                ReDrawX();
                ReDrawY();
                Pic.MouseWheel += new MouseEventHandler(Pic_MouseWheel);
            }
    
            private void Pic_MouseEnter(object sender, EventArgs e)
            {
                Pic.Focus();
            }
    
            private void PContainer_Scroll(object sender, ScrollEventArgs e)
            {
                if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
                {
                    XStart = e.NewValue / (MonitorDPI * _multiple);
                    ReDrawX();
                }
                else if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
                {
                    YStart = e.NewValue / (MonitorDPI * _multiple);
                    ReDrawY();
                }
            }
    
    
            #region 画图片选定区域
            bool MouseIsDown = false;
            Rectangle MouseRect = Rectangle.Empty;
    
            private void Pic_MouseDown(object sender, MouseEventArgs e)
            {
                MouseIsDown = true;
                MouseRect = new Rectangle(e.X, e.Y, 0, 0);
                Rectangle rec = new Rectangle(0, 0,
                    Math.Min(PContainer.ClientRectangle.Width, Pic.ClientRectangle.Width),
                    Math.Min(PContainer.ClientRectangle.Height, Pic.ClientRectangle.Height));
                Cursor.Clip = PContainer.RectangleToScreen(rec);
            }
    
            private void Pic_MouseMove(object sender, MouseEventArgs e)
            {
                if (MouseIsDown)
                {
                    MouseRect.Width = e.X - MouseRect.Left;
                    MouseRect.Height = e.Y - MouseRect.Top;
                    if (MouseRect.Width > 0 && MouseRect.Height > 0)
                    {
                        Rectangle rect = Pic.RectangleToScreen(MouseRect);
                        ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
                    }
                    Pic.Refresh();
                }
    
            }
    
            private void Pic_MouseUp(object sender, MouseEventArgs e)
            {
                if (MouseIsDown)
                {
                    MouseRect.Width = e.X - MouseRect.Left;
                    MouseRect.Height = e.Y - MouseRect.Top;
                    using (Graphics g = Graphics.FromImage(Pic.Image))
                    {
                        g.DrawRectangle(new Pen(Color.Red), MouseRect);
                    }
                    Pic.Refresh();
                    MouseIsDown = false;
                    if ((int)(MouseRect.Width * _multiple) > 0 && (int)(MouseRect.Height * _multiple) > 0)
                    {
                        list.Add(new Rectangle((int)(MouseRect.X / _multiple),
                            (int)(MouseRect.Y / _multiple),
                            (int)(MouseRect.Width / _multiple),
                            (int)(MouseRect.Height / _multiple)
                            ));
                    }
                    MouseRect = Rectangle.Empty;
                    Cursor.Clip = Rectangle.Empty;
                }
            }
            #endregion
            public List<Rectangle> list = new List<Rectangle>();
    
            private void Pic_DoubleClick(object sender, EventArgs e)
            {
                MouseEventArgs ev = e as MouseEventArgs;
                List<Rectangle> temp = new List<Rectangle>();
                foreach (Rectangle item in list)
                {
                    if (ev.X > item.X * _multiple && ev.X < item.X * _multiple + item.Width * _multiple &&
                        ev.Y > item.Y * _multiple && ev.Y < item.Y * _multiple + item.Height * _multiple)
                    {
                        temp.Add(item);
                    }
                }
                foreach (Rectangle item in temp)
                {
                    list.Remove(item);
                }
    
                DrawRect();
            }
    
            /// <summary>
            /// 把list中的框画到图片中
            /// </summary>
            private void DrawRect()
            {
                if (Pic.Image != _initImg)
                    Pic.Image.Dispose();
                Pic.Image = PicHelper.GetNewPic(_initImg, (int)(_initImg.Width * _multiple), (int)(_initImg.Height * _multiple));
                using (Graphics g = Graphics.FromImage(Image))
                {
                    foreach (Rectangle item in list)
                    {
                        g.DrawRectangle(new Pen(Color.Red), new Rectangle((int)(item.X * _multiple),
                            (int)(item.Y * _multiple),
                            (int)(item.Width * _multiple),
                            (int)(item.Height * _multiple)
                            ));
                    }
                }
                Pic.Refresh();
            }
    
            private void AdapterDpi()
            {
                if (MonitorDPI * _multiple < 10)
                {
                    MonitorDPI *= 2;
                }
                if (MonitorDPI * _multiple > 20)
                {
                    MonitorDPI /= 2;
                }
            }
    
    
    
        }
    }

     

    展开全文
  • 最近要做个winform的东西,要在里面集成一个类似Windows自带画图的标尺功能,还要能在图片上画矩形。在网上找了好久也没找到写好的控件,无奈自己做了一个。 目前还有些bug,这里先做个分享。(Ps:很少做winform...

    最近要做个winform的东西,要在里面集成一个类似Windows自带画图的标尺功能,还要能在图片上画矩形框。在网上找了好久也没找到写好的控件,无奈自己做了一个。

    目前还有些bug,这里先做个分享。(Ps:很少做winform的东西,做的不好,轻喷。另外欢迎指点。)

    由于最后要做的东西的背景是黑的,标尺就画成白的了,有需要的自己改吧。。

    直接上代码

    using Helper;
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace UserCtrl
    {
        public partial class RulerControl : UserControl
        {
            private double _monitorDPI = 100;
            /// <summary>
            /// 用于控制放大倍数
            /// </summary>
            private double _multiple = 1;
    
            /// <summary>
            /// 每多少个像素1格
            /// </summary>
            public double MonitorDPI
            {
                get
                {
                    return _monitorDPI;
                }
                set
                {
                    _monitorDPI = value;
                }
            }    
            /// <summary>
            /// X轴偏移位置
            /// </summary>
            private float offSetX=0;
    
            /// <summary>
            /// Y轴偏移位置
            /// </summary>
            private float offSetY = 0;
    
            /// <summary>
            /// 开始位置X
            /// </summary>
            public double XStart
            {
                get;
                set;
            }
    
            /// <summary>
            /// 开始位置Y
            /// </summary>
            public double YStart
            {
                get;
                set;
            }
    
            /// <summary>
            /// 用户设置的原始图
            /// </summary>
            private Image _initImg = null;
    
    
    
            /// <summary>
            /// 图片
            /// </summary>
            public Image Image
            {
                get
                {
                    return Pic.Image;
                }
                set
                {
                    Pic.Image = value;
                    if (_initImg == null&&value!=null)
                    {
                        _initImg = PicHelper.GetNewPic(value, value.Width , value.Height );
                    }
                }
            }
            private Font font = new Font("宋体", 9); //刻度值显示字体
            public RulerControl()
            {
                InitializeComponent();
            }
    
            private void Pic_MouseWheel(object sender, MouseEventArgs e)
            {
                if (MouseButtons == MouseButtons.Left)
                {
                    return;
                }
                Image img = Pic.Image;
                if (img != null)
                {
                    if (e.Delta >= 0)
                    {
                        if (_multiple * 2 > 4)
                            return;
                        _multiple *= 2;
                    }
                    else
                    {
                        if (Pic.Width < this.Width - 50)
                            return;
    
                        _multiple *= 0.5;
                        if (Pic.Width <= (this.Width - 50))
                        {
                            XStart = 0;
                            YStart = 0;
                        }
                    }
                    DrawRect();
                    AdapterDpi();
                    ReDrawX();
                    ReDrawY();
                }
            }
    
            private void RulerControl_Paint(object sender, PaintEventArgs e)
            {
                P1.Height = 50;
                P1.Width = this.Width - 50;
                P2.Height = this.Height - 50;
                P2.Width = 50;
                P1.Location = new Point(50, 0);
                P2.Location = new Point(0, 50);
                PContainer.Location = new Point(50, 50);
            }
    
            private void RulerControl_Resize(object sender, EventArgs e)
            {
                P1.Height = 50;
                P1.Width = this.Width - 50;
                P2.Height = this.Height - 50;
                P2.Width = 50;
                P1.Location = new Point(50, 0);
                P2.Location = new Point(0, 50);
                PContainer.Location = new Point(50, 50);
            }
    
            /// <summary>
            /// 重画Y轴
            /// </summary>
            private void ReDrawY()
            {
                if (P2.BackgroundImage != null)
                {
                    P2.BackgroundImage.Dispose();
                }
                Bitmap bmpY = new Bitmap(P2.Width, P2.Height);
                using (Graphics g = Graphics.FromImage(bmpY))
                {
                    int originLocation = bmpY.Width - 1;
                    int startY = (int)Math.Ceiling(YStart);
                    offSetY = (float)(MonitorDPI * _multiple * (startY - YStart));
                    for (int i = startY; i <= Math.Ceiling(P2.Height / (MonitorDPI * _multiple) + YStart); i++)
                    {
                        float y = (float)(MonitorDPI * _multiple * (i - YStart)) + offSetY;
                        if (y >= 0)
                        {
                            PointF start = new PointF(originLocation, y);
                            PointF end = new PointF(originLocation - 3, y);
                            if (i % 5 == 0)
                            {
                                end = new PointF(originLocation - 6, y);
                            }
                            if (i % 10 == 0 && i != 0)
                            {
                                end = new PointF(originLocation - 12, y);
                                g.DrawString((i*MonitorDPI).ToString(), font, Brushes.White, new PointF(originLocation - 30, y - 5));
                            }
                            g.DrawLine(Pens.White, start, end);
                        }
                    }
                    g.DrawLine(Pens.White, new PointF(originLocation, 0), new PointF(originLocation, bmpY.Height));
                    P2.BackgroundImage = bmpY;
                }
            }
    
            /// <summary>
            /// 重画X轴
            /// </summary>
            private void ReDrawX()
            {
                if (P1.BackgroundImage != null)
                {
                    P1.BackgroundImage.Dispose();
                }
                Bitmap bmpX = new Bitmap(P1.Width, P1.Height);
                using (Graphics g = Graphics.FromImage(bmpX))
                {
                    int originLocation = bmpX.Height - 1;
                    int startX = (int)Math.Ceiling(XStart);
                    offSetX = (float)(MonitorDPI * _multiple * (startX - XStart));
                    for (int i = startX; i <= Math.Ceiling(P1.Width / (MonitorDPI * _multiple) + XStart); i++)
                    {
                        float x = (float)(MonitorDPI * _multiple * (i - XStart)) + offSetX;
                        if (x >= 0)
                        {
                            PointF start = new PointF(x, originLocation);
                            PointF end = new PointF(x, originLocation - 3);
                            if (i % 5 == 0)
                            {
                                end = new PointF(x, originLocation - 6);
                            }
                            if (i % 10 == 0 && i != 0)
                            {
                                end = new PointF(x, originLocation - 12);
                                g.DrawString((i*MonitorDPI).ToString(), font, Brushes.White, new PointF(x - 5, originLocation - 30));
                            }
                            g.DrawLine(Pens.White, start, end);
                        }
                    }
                    g.DrawLine(Pens.White, new PointF(0, originLocation), new PointF(bmpX.Width, originLocation));
                    P1.BackgroundImage = bmpX;
                }
            }
    
            private void RulerControl_Load(object sender, EventArgs e)
            {
                P1.Height = 50;
                P1.Width = this.Width - 50;
                P2.Height = this.Height - 50;
                P2.Width = 50;
                P1.Location = new Point(50, 0);
                P2.Location = new Point(0, 50);
                PContainer.Location = new Point(50, 50);
                ReDrawX();
                ReDrawY();
                Pic.MouseWheel += new MouseEventHandler(Pic_MouseWheel);
            }
    
            private void Pic_MouseEnter(object sender, EventArgs e)
            {
                Pic.Focus();
            }
    
            private void PContainer_Scroll(object sender, ScrollEventArgs e)
            {
                if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
                {
                    XStart = e.NewValue / (MonitorDPI * _multiple);
                    ReDrawX();
                }
                else if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
                {
                    YStart = e.NewValue / (MonitorDPI * _multiple);
                    ReDrawY();
                }
            }
    
    
            #region 画图片选定区域
            bool MouseIsDown = false;
            Rectangle MouseRect = Rectangle.Empty;
    
            private void Pic_MouseDown(object sender, MouseEventArgs e)
            {
                MouseIsDown = true;
                MouseRect = new Rectangle(e.X, e.Y, 0, 0);
                Rectangle rec = new Rectangle(0, 0,
                    Math.Min(PContainer.ClientRectangle.Width, Pic.ClientRectangle.Width),
                    Math.Min(PContainer.ClientRectangle.Height, Pic.ClientRectangle.Height));
                Cursor.Clip = PContainer.RectangleToScreen(rec);
            }
    
            private void Pic_MouseMove(object sender, MouseEventArgs e)
            {
                if (MouseIsDown)
                {
                    MouseRect.Width = e.X - MouseRect.Left;
                    MouseRect.Height = e.Y - MouseRect.Top;
                    if (MouseRect.Width > 0 && MouseRect.Height > 0)
                    {
                        Rectangle rect = Pic.RectangleToScreen(MouseRect);
                        ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
                    }
                    Pic.Refresh();
                }
    
            }
    
            private void Pic_MouseUp(object sender, MouseEventArgs e)
            {
                if (MouseIsDown)
                {
                    MouseRect.Width = e.X - MouseRect.Left;
                    MouseRect.Height = e.Y - MouseRect.Top;
                    using (Graphics g = Graphics.FromImage(Pic.Image))
                    {
                        g.DrawRectangle(new Pen(Color.Red), MouseRect);
                    }
                    Pic.Refresh();
                    MouseIsDown = false;
                    if ((int)(MouseRect.Width * _multiple) > 0 && (int)(MouseRect.Height * _multiple) > 0)
                    {
                        list.Add(new Rectangle((int)(MouseRect.X / _multiple),
                            (int)(MouseRect.Y / _multiple),
                            (int)(MouseRect.Width / _multiple),
                            (int)(MouseRect.Height / _multiple)
                            ));
                    }
                    MouseRect = Rectangle.Empty;
                    Cursor.Clip = Rectangle.Empty;
                }
            }
            #endregion
            public List<Rectangle> list = new List<Rectangle>();
    
            private void Pic_DoubleClick(object sender, EventArgs e)
            {
                MouseEventArgs ev = e as MouseEventArgs;
                List<Rectangle> temp = new List<Rectangle>();
                foreach (Rectangle item in list)
                {
                    if (ev.X > item.X * _multiple && ev.X < item.X * _multiple + item.Width * _multiple &&
                        ev.Y > item.Y * _multiple && ev.Y < item.Y * _multiple + item.Height * _multiple)
                    {
                        temp.Add(item);
                    }
                }
                foreach (Rectangle item in temp)
                {
                    list.Remove(item);
                }
                
                DrawRect();
            }
    
            /// <summary>
            /// 把list中的框画到图片中
            /// </summary>
            private void DrawRect()
            {
                if (Pic.Image != _initImg)
                    Pic.Image.Dispose();
                Pic.Image = PicHelper.GetNewPic(_initImg, (int)(_initImg.Width * _multiple), (int)(_initImg.Height * _multiple));
                using (Graphics g = Graphics.FromImage(Image))
                {
                    foreach (Rectangle item in list)
                    {
                        g.DrawRectangle(new Pen(Color.Red), new Rectangle((int)(item.X * _multiple),
                            (int)(item.Y * _multiple),
                            (int)(item.Width * _multiple),
                            (int)(item.Height * _multiple)
                            ));
                    }
                }
                Pic.Refresh();
            }
    
            private void AdapterDpi()
            {
                if (MonitorDPI * _multiple < 10)
                {
                    MonitorDPI *= 2;
                }
                if (MonitorDPI * _multiple > 20)
                {
                    MonitorDPI /= 2;
                }
            }
    
    
            
        }
    }

    下载链接:http://download.csdn.net/download/p690075426/10142184

     

    ---------------------
    作者:ydp1991
    来源:博客园
    原文:https://www.cnblogs.com/ydp1991/p/7955382.html

     

    转载于:https://www.cnblogs.com/cnwuchao/p/10586754.html

    展开全文
  • 我们知道,在做Web开发的时候,很多控件可以用来做HTML内容编辑的,Winform开发就相对少很多,不过很多时候,我们在做Winform开发的时候,也是需要处理这样的场景的。例如发送HTML邮件内容的时候,在给客户编写内容...

    我们知道,在做Web开发的时候,很多控件可以用来做HTML内容编辑的,Winform开发就相对少很多,不过很多时候,我们在做Winform开发的时候,也是需要处理这样的场景的。例如发送HTML邮件内容的时候,在给客户编写内容丰富的反馈意见或者邮件的时候等等,因此有必要做一个支持好HTML格式,支持图片插入等丰富内容的控件。

    本文就是介绍这么一个控件,这个控件增加了一些常见HTML格式的工具栏操作,并且改良支持Win7系统下的内容编辑(一般WebBrowser包装类,在Win7下内容会变得不可编辑),本控件不会有这个问题。另外,一般WebBrowser需要客户端有Microsoft.MSHTML.dll,这个文件7M多,一般开发的机器上会有,但普通用户的电脑就不一定有这个文件,而且这个文件很大,非常不适合软件的部署。本控件使用WindowsLive.Writer.Interop.Mshtml和WindowsLive.Writer.Mshtml两个小文件来替代Microsoft.MSHTML.dll这个庞然大物的dll。

    下面是一个在Winform开发框架中用于意见反馈的场景,里面可以使用丰富的HTML格式,可以插入图片等操作,如下所示。

    打开问题反馈出现下面的HTML内容编辑界面

    由于我是把反馈信息作为邮件发送的,因此,插入的本地图片,也会作为嵌入内容写入到邮件当中,在邮件内容中插入嵌入图片是一个有点技术含量的工作,不同于一般的邮件附件,他是把图片字节写在邮件的同时,也同时修改邮件内容的图片应用为cid:***这样的路径格式。收到的邮件如下所示。

    由于发送邮件是常见的操作,因此我把它集成在我的公用类库(详细参考《公用类库系列文章》)里面去了,因此发送邮件(可带附件、HTML内容带嵌入图片)是一件很轻松的事情,发送邮件的详细介绍在我前面一篇随笔《厚积薄发,丰富的公用类库积累,助你高效进行系统开发(12)--- 网络相关操作辅助类》有具体的介绍,下面摘录下来强调一下。

    1、发送邮件的辅助类 EmailHelper。  

    实现效果

    1)  本辅助类主要是用来方便实现发送邮件操作,可以发送附件、嵌入图片、HTML等内容邮件。使用底层SMTP协议指令进行发送,成功率较高。 

    2)邮件发送可以用在客户反馈,信息推广,客户沟通,员工交流等方面业务需要。

    实现代码

    1)辅助类提供的方法源码如下所示: ..............省略..............

    2)辅助类EmailHelper的使用例子代码如下所示

    EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");    
    email.Subject = "伍华聪的普通测试邮件";    
    email.Body = string.Format("测试邮件正文内容");    
    email.IsHtml = true;    
    email.From = "wuhuacong2013@163.com";    
    email.FromName = "wuhuacong2013";    
    email.AddRecipient("6966254@qq.com");    
    try   
    {    
        bool success = email.SendEmail();    
        MessageUtil.ShowTips(success ? "发送成功" : "发送失败");    
    }    
    catch (Exception ex)    
    {    
        MessageUtil.ShowError(ex.Message);    
    }  

    3)如果使用发送附件、发送嵌入图片(正文中有图片显示内容的)方式,则例子代码如下所示。

    EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");    
    email.Subject = "伍华聪的图片附件测试邮件";    
    string embedFile = Path.Combine(Application.StartupPath, "cityroad.jpg");    
    email.Body = string.Format("测试邮件正文内容<img src=\"{0}\" title='测试图片' /> ", embedFile);    
    email.IsHtml = true;    
    email.From = "wuhuacong2013@163.com";    
    email.FromName = "wuhuacong2013";    
    email.AddRecipient("6966254@qq.com");    
    email.AddAttachment(Path.Combine(Application.StartupPath, "ringin.wav"));//.AddAttachment("C:\\test.txt");    
       
    try   
    {    
        bool success = email.SendEmail();    
        MessageUtil.ShowTips(success ? "发送成功" : "发送失败");     
    }    
    catch (Exception ex)    
    {    
        MessageUtil.ShowError(ex.Message);    
    }  

    其实该控件还可以改造成HTML内容显示控件,不过由于涉及要将服务器的图片文件下载并保存到一个目录,并修改HTML内容中图片的路径以便进行显示,修改内容的时候,还得记住那些图片是原有的,新增的图片才提交到服务器即可,不过这样就会搞得比较复杂一点。大家如果有好的建议可以讨论下。

    本文转自博客园伍华聪的博客,原文链接:Winform开发框架之HTML编辑控件,如需转载请自行联系原博主。



    展开全文
  • 在C# WinForm窗体中,如何调整TabControl控件![图片说明](https://img-ask.csdn.net/upload/202010/14/1602667827_29790.png) 图片画红 按钮的大小
  • 版本.net Framwork 4.0 C#文本编辑控件,可实现对文本加粗下划线倾斜,居中左对齐右对齐,改变文字颜色,改变文字大小 使用控件的rtf字段对应编辑内的内容(包括图片,字体格式等) dll文件,方便使用在你的项目中
  • 我们在开发一些Winform程序的时候,除了常规的显示普通数据外,有的时候需要显示一些人员肖像或者一些车辆等物体的图片,一般这些内容较小,所以以二进制存储在数据库是一个不错的方案。但由于它们虽然很常用,设计...
  • 本文实例为大家分享了C# winform登陆验证码的具体代码,供大家参考,具体内容如下 1、 新建一个简单的 windows 应用项目 在默认的 Form1 中添加如下控件: 1) Label : text = “ 输入验证码 :” 2) TextBox ...
  • 我们日常记录会伴随着有图片、文档等附件形式来展现,如果为每个业务对象都做一个附件管理,或者每次开发系统都重新做,效率可想而知。一个通用的集上传,预览,管理为一体的集中式附件管理控件即为重要。在上一篇...
  • 实现一个自定义进度条,进度条的目的就是作为显示进度的数据可视化控件,具体原理就是填充两种或多种不同颜色比例的矩形或Path,主要有两种方法实现: 1.重绘/重写控件; 2.自定义控件; 由于本人没有深入研究过重绘/...
  • winform日历控件

    2014-09-30 11:50:12
    可以设定日历的背景色和图片;字体样式、大小、颜色;边框的样式、颜色;星期的中英文切换;周末文字的颜色;当日文字的背景和颜色等
  • winform公共控件

    2017-04-26 20:06:00
    在一个内多个多选 ComboBox 下拉菜单 DateTimePicker 时间控件 ListBox 选择多个 MaskedTextBox 限制格式 NotifyIcon 托盘工具 NumericUpDown 数字限制 PictureBox 图片 ProgressBar 进度...
  • 功能说明:WPF控件,非winform控件。把图片文件拖入内即可显示。把图片拖出即可删除。开发工具:Visual Studio v2010.NET Framework 4 Client Profile版本历史:V1.0 2011年07月19日基于WPF,实现一个具有拖入
  • 目录 常用控件属性: 常用控件 Form窗体 Label标签 TextBox文本框 ComboBox组合框 (就是有下拉列表的叫组合框) ListBox列表框 (多行文本框) MenuStrip菜单栏 ...PictureBox图片框 Ima...
  • 之前实现了再winform窗体上叠加一些透明控件,但效果有一些瑕疵,图片边框会有一些锯齿。后来花了99元再网上买了DSkin皮肤框架授权码,实现了下效果,感觉还不错。 效果图: 主窗体是海康相机 如果没有海康相机,...
  • 1、 新建一个简单的 windows 应用项目 在默认的 Form1 中添加如下控件: 1) Label : text = “ 输入...3) Image : name=” picValidCode” 显示验证码的图片控件 4) Button :单击事件进行验证码验证 2、...
  • 本案例采用WindowsFormsHost控件作为容器,同时适用于WinForm方向。 要通过WindowsFormsHost使用WinForm中的控件,需要在...图片裁剪效果图前端XAML代码: <Window x:Class="WpfImageResizer.MainWindow" ...
  • 用C# winform开发界面时会遇到很多小问题,首先贴透明的png图片后,图片无法透明,这点可以通过属性设置:外观/BackColor (Web TransParent)可以解决。  但当用多个控件时,如PictureBox,控件都贴png透明图片...
  • 用C# winform开发界面时会遇到很多小问题,比如贴透明的png图片或GIF图片后,图片无法透明,这点可以通过属性设置:外观/BackColor (Web TransParent)可以解决。但当用多个控件时,如PictureBox,控件都贴透明图片...
  •  表示用于显示图像的 Windows 图片框控件。通常使用 PictureBox 来显示位图、元文件、图标、JPEG、GIF 或 PNG 文件中的图形。在设计时或运行时将 Image 属性设置为要显示的 Image。 也可以通过设置 ImageLocation ...
  • PictureBox表示用于显示图像的 Windows 图片框控件https://msdn.microsoft.com/zh-cn/library/system.windows.forms.picturebox.aspx 建立一项目: 完整代码如下 : using System; using System.Collections...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 143
精华内容 57
关键字:

winform图片框控件