亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# GDI在控件上繪圖的方法

 更新時(shí)間:2014年09月11日 11:33:34   投稿:shichen2014  
這篇文章主要介紹了C# GDI在控件上繪圖的方法,包括了常見(jiàn)的鼠標(biāo)事件及繪圖操作,需要的朋友可以參考下

本文以在chart控件上和窗體上畫矩形為例子講述了C# GDI在控件上繪圖的方法。分享給大家供大家參考。具體方法如下:

具體的實(shí)現(xiàn)方法就不多解釋了,備注很詳細(xì),代碼也很簡(jiǎn)單。

主要功能代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;

namespace WFApp2
{
  public partial class data : Form
  {
    public data()
    {
      InitializeComponent();
      //窗體
      g = this.CreateGraphics();
      //chart控件
      g2 = this.chart1.CreateGraphics();
    }
   
    public Point firstPoint = new Point(0, 0); //鼠標(biāo)第一點(diǎn) 
    public Point secondPoint = new Point(0, 0); //鼠標(biāo)第二點(diǎn) 
    public bool begin = false;  //是否開始畫矩形 
    /// <summary>
    /// 在from上畫矩形
    /// </summary>
    Graphics g;

    /// <summary>
    /// 在chart1控件上畫矩形
    /// </summary>
    Graphics g2;

    /// <summary>
    /// 在窗體上按下鼠標(biāo)事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void data_MouseDown(object sender, MouseEventArgs e)
    {
      begin = true;
      firstPoint = new Point(e.X, e.Y);
    }

    /// <summary>
    /// 在窗體上鼠標(biāo)移動(dòng)開始繪圖
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void data_MouseMove(object sender, MouseEventArgs e)
    {
      if (begin)
      {
        //清除窗體繪圖面,相當(dāng)于刷新了一次窗體界面然后重新繪制
        g.Clear(this.BackColor);
        //獲取新的右下角坐標(biāo) 
        secondPoint = new Point(e.X, e.Y);
        //獲取兩個(gè)數(shù)中的大者或小者
        int minX = Math.Min(firstPoint.X, secondPoint.X);
        int minY = Math.Min(firstPoint.Y, secondPoint.Y);
        int maxX = Math.Max(firstPoint.X, secondPoint.X);
        int maxY = Math.Max(firstPoint.Y, secondPoint.Y);

        //畫框 
        g.DrawRectangle(new Pen(Color.Red), minX, minY, maxX - minX, maxY - minY);
        //ControlPaint.DrawReversibleFrame(new Rectangle(minX, minY, maxX - minX, maxY - minY),this.BackColor,FrameStyle.Dashed);

      }
    }

    /// <summary>
    /// 鼠標(biāo)松開停止繪圖
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void data_MouseUp(object sender, MouseEventArgs e)
    {
      begin = false;
    }

    /// <summary>
    /// 在chart控件上移動(dòng)鼠標(biāo)繪圖
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void chart1_MouseMove(object sender, MouseEventArgs e)
    {
      if (begin)
      {
        //重新在chart上面繪圖,此處不能用clear方法,clear會(huì)清除整個(gè)繪圖界面chart控件會(huì)被清除
        this.Refresh();
        //獲取新的右下角坐標(biāo) 
        secondPoint = new Point(e.X, e.Y);
        int minX = Math.Min(firstPoint.X, secondPoint.X);
        int minY = Math.Min(firstPoint.Y, secondPoint.Y);
        int maxX = Math.Max(firstPoint.X, secondPoint.X);
        int maxY = Math.Max(firstPoint.Y, secondPoint.Y);

        //畫矩形
        g2.DrawRectangle(new Pen(Color.Red), minX, minY, maxX - minX, maxY - minY);

      }
    }

    /// <summary>
    /// 鼠標(biāo)松開停止繪圖
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void chart1_MouseUp(object sender, MouseEventArgs e)
    {
      begin = false;
    }

    /// <summary>
    /// 在chart控件上按下鼠標(biāo)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void chart1_MouseDown(object sender, MouseEventArgs e)
    {
      begin = true;
      firstPoint = new Point(e.X, e.Y);
    }
  }
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助

相關(guān)文章

  • C#類的多態(tài)性詳解

    C#類的多態(tài)性詳解

    這篇文章主要為大家詳細(xì)介紹了C#類的多態(tài)性,主要有兩種:一是編譯時(shí)的多態(tài)性,二是運(yùn)行時(shí)的多態(tài)性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • C#泛型Dictionary的用法實(shí)例詳解

    C#泛型Dictionary的用法實(shí)例詳解

    這篇文章主要介紹了C#泛型Dictionary的用法,并以實(shí)例的形式講述了對(duì)鍵值對(duì)的填充、移除及遍歷等操作,需要的朋友可以參考下
    2014-09-09
  • C#隊(duì)列Queue多線程用法實(shí)例

    C#隊(duì)列Queue多線程用法實(shí)例

    這篇文章主要介紹了C#隊(duì)列Queue多線程用法,實(shí)例分析了隊(duì)列的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • C#的自定義語(yǔ)法糖的使用詳解

    C#的自定義語(yǔ)法糖的使用詳解

    這篇文章主要介紹了C#的自定義語(yǔ)法糖的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • C#使用遠(yuǎn)程服務(wù)調(diào)用框架Apache Thrift

    C#使用遠(yuǎn)程服務(wù)調(diào)用框架Apache Thrift

    這篇文章介紹了C#使用遠(yuǎn)程服務(wù)調(diào)用框架Apache Thrift的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#使用Socket發(fā)送HTTP/HTTPS請(qǐng)求的實(shí)現(xiàn)代碼

    c#使用Socket發(fā)送HTTP/HTTPS請(qǐng)求的實(shí)現(xiàn)代碼

    這篇文章主要介紹了c#使用Socket發(fā)送HTTP/HTTPS請(qǐng)求的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-09-09
  • C#巧用DateTime預(yù)設(shè)可選的日期范圍(如本年度、本季度、本月等)

    C#巧用DateTime預(yù)設(shè)可選的日期范圍(如本年度、本季度、本月等)

    這篇文章主要介紹了C#巧用DateTime預(yù)設(shè)可選的日期范圍,如本年度、本季度、本月等,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C#比較數(shù)組是否相同的3種方式小結(jié)

    C#比較數(shù)組是否相同的3種方式小結(jié)

    本文主要介紹了C#比較數(shù)組是否相同的3種方式小結(jié),主要包括SequenceEqual()方法,循環(huán)的方式比較,StructuralComparisons.StructuralEqualityComparer方式,感興趣的可以了解一下
    2024-01-01
  • C#中的協(xié)變與逆變深入講解

    C#中的協(xié)變與逆變深入講解

    這篇文章主要給大家介紹了關(guān)于C#中協(xié)變與逆變的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Unity UGUI的Image圖片組件使用詳解

    Unity UGUI的Image圖片組件使用詳解

    這篇文章主要為大家介紹了Unity UGUI的Image圖片組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論