麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

Visual C#的剪切板編程

2023-05-10 18:49:30
字體:
來源:轉載
供稿:網友

本文介紹了如何使用Visual C#操作剪切板的方法,講的非常到位,大家如果想用C#操作剪切板,不妨參照一下這個文章。

Visual C#是微軟.Net框架中的一個重要的程序開發語言,雖然在.Net框架中還有其他的程序開發語言,但微軟似乎對Visual C#更喜愛有加。這同時也就決定了Visual C#在.Net框架中的地位,以及他以后的發展前途。由于針對剪切板方面的編程始終是程序設計的一個重點,當然也可以算是一個難點。本文將探討如何利用Visual C#進行剪切板編程。本文將結合二個具體的程序例子來介紹Visual C#剪切板編程的二個重要方面:判定剪切板中的數據類型、保存剪切板中的數據。首先來介紹Visual C#如何判定剪切板中的數據類型的。

剪切板中可以存放許多類型的數據,而Visual C#可以判定剪切板中的數據類型大致有21種,這其中包括位圖(Bitmap)、文本(Text)、超文本(Html)等,由于類型比較將多,本文將只介紹比較典型的數據類型,對于其他的數據類型,操作方法基本類似。

1、本文程序設計和運行的環境:

(1)微軟公司視窗2000服務器版

(2).Net FrameWork SDK Beta 2

2、 介紹程序中使用到的類和接口:

Visual C#判斷剪切板中的數據類型,要使用到.Net FrameWork SDK中二個類(Class)和一個接口(Interface),具體的就是:Clipboard類、DataFormats類和IdataObject接口。這三者的作用是:Clipboard類是一個不可以繼承的類,他的主要作用是通過自身的方法來實現在計算機系統的剪切板中存放和獲得數據。DataFormats類主要是提供了一個預先設定好的剪切板數據類型,并可以被IdataObject接口調用來判定剪切板數據類型。IdataObject接口提供了一個zi you格式的裝置來傳輸數據。下面就結合這些類和接口來具體看一下,具體的使用方法。

3、Visual C#判定剪切板數據類型的解決思路以及重要步驟的解決辦法:

(1)首先要讀取剪切板中的數據內容:

Clipboard類中有一個方法叫GetDataObject ( ),此方法的作用就是讀取當前剪切板中的數據內容。要把讀取了當前剪切板中數據存放起來,這就要用到IdataObject接口,這個接口可以使用在Clipboard類和Drag and Drop的操作中。下面這些代碼就是讀取把當前剪切板中的數據內容并存放起來。

IDataObject d = Clipboard.GetDataObject ( ) ;

(2)判定當前剪切板中的數據類型:

在IdataObject接口中有一個方法名稱是GetDataPresent ( ),這個方法的作用是檢測存放在接口的數據是否是指定的數據類型或者可以轉換成指定的數據類型。他的返回值是布爾型,True表示為指定的數據類型或者可以轉換成指定的數據類型。False于上面意思相反。下面語句實現的功能是判定當前剪切板的數據內容是否為位圖、文本和超文本的,具體如下:

if ( d.GetDataPresent ( DataFormats.Bitmap ) )
    {
         Console.WriteLine ( "當前剪切板中的數據類型是位圖!" ) ;
    }

       else if ( d.GetDataPresent ( DataFormats.Text ) )
    {
         Console.WriteLine ( "當前剪切板中的數據類型是文本!" ) ;
    }
    else if ( d.GetDataPresent ( DataFormats.Html ) )
    {
         Console.WriteLine ( "當前剪切板中的數據類型是超文本!" ) ;
    }
    else
    {
         Console.WriteLine ( "當前剪切板中的數據類型是其他類型數據!" ) ;
    }

4、程序源代碼:

通過上面的介紹,我們不難理解下面這些程序代碼,這些程序代碼的功能就是判定當前剪切板中的數據是什么類型。具體如下:

using System ;
    using System.Windows.Forms ;
    public class MyClipboard
    {
        public static void Main ( string [ ] args )
        {
            IDataObject d = Clipboard.GetDataObject ( ) ;
            if ( d.GetDataPresent ( DataFormats.Bitmap ) ) {
                 Console.WriteLine ( "當前剪切板中的數據類型是位圖!" ) ;
            } else if ( d.GetDataPresent ( DataFormats.Text ) ) {
                 Console.WriteLine ( "當前剪切板中的數據類型是文本!" ) ;
            } else if ( d.GetDataPresent ( DataFormats.Html ) ) {
                 Console.WriteLine ( "當前剪切板中的數據類型是超文本!" ) ;
            } else {
                 Console.WriteLine ( "當前剪切板中的數據類型是其他類型數據!" ) ;
            }
        }
     }

5、Visual C#保存剪切板數據的解決思路以及重要步驟的解決辦法:

用Visual C#保存剪切板中的數據要使用的類和接口和判定剪切板中的數據類型基本一樣。但由于要讀取剪切板數據,就需要用到了IdataObject接口的方法GetData ( ),這個方法的作用就是獲得指定類型的數據內容。他的語法為:

object GetData ( Type ) ;

我們注意到這個方法返回的類型是一個Object類型,這是一個參考類型,他的變量就是一個參考類型變量,而我們讀取的內容應該是一個實值類型變量,這就又涉及到裝箱和出箱的問題了。由于在前面的文章中已經比較詳細的說明了這二者的關系(見《用Visual C#動態生成組件》),所以在本文就不介紹了。在本文的程序中是通過下列二行語句來實現這種由參考類型變量轉換成實值類型變量的過程:

Bitmap b = ( Bitmap ) d.GetData ( DataFormats.Bitmap ) ;//位圖

String c = ( String ) d.GetData ( DataFormats.Text ) ;//文本

實現保存剪切板中數據的程序的設計思路是,首先判定當前剪切板中的數據類型,如果數據類型為位圖,則保存到C盤的"my.bmp"文件中,如果數據類型是文本,則用一個RichText組件顯示出來。否則則提示是其他類型數據。下圖就是程序實現上述功能的截圖:

  圖01:數據類型為位圖的時候,程序運行界面

  圖02:數據類型為文本時程序運行界面

如何判定剪切板數據類型在上面已經介紹過了,程序的另外一個難點就是,假定已經判定剪切板中的數據類型為位圖,如何保存數據。在程序中是通過名稱空間System.Windows.Forms中的Bitmap類的Save ( )方法來實現的。下列語句就是具體的實現方法。

Bitmap b = ( Bitmap ) d.GetData ( DataFormats.Bitmap ) ;

b.Save ( @"c:/my.bmp" ) ;

MessageBox.Show ( "當前剪切板內容是位圖,已經保存到"MY.BMP"文件中!" ) ;

6、 用Visual C#讀取當前剪切板中數據內容并保存的程序源代碼:

通過上面的介紹,可以得到實現上述功能的源程序代碼,如下:

using System ;
    using System.Drawing ;
    using System.Collections ;
    using System.ComponentModel ;
    using System.Windows.Forms ;
    using System.Data;
    public class Form1 : Form
    {
        private RichTextBox richTextBox1 ;
        private Button button1 ;
        private System.ComponentModel.Container components = null ;
        public Form1()
        {
            //初始化窗體中的各個組件
            InitializeComponent ( ) ;
         }
         //清除程序中使用過的資源
         protected override void Dispose ( bool disposing )
         {
             if ( disposing )
             {
                 if ( components != null )
                 {
                     components.Dispose ( ) ;
                 }
             }
             base.Dispose ( disposing );
          }
          private void InitializeComponent ( )
          {
               this.richTextBox1 = new RichTextBox ( ) ;
               this.button1 = new Button ( ) ;
               this.SuspendLayout ( ) ;
               this.richTextBox1.Location = new System.Drawing.Point ( 40 , 16 ) ;
               this.richTextBox1.Name = "richTextBox1" ;
               this.richTextBox1.Size = new System.Drawing.Size ( 336 , 264 ) ;
               this.richTextBox1.TabIndex = 0 ;
               this.richTextBox1.Text = "" ;
               this.button1.Location = new System.Drawing.Point ( 128 , 304 ) ;
               this.button1.Name = "button1" ;
               this.button1.Size = new System.Drawing.Size ( 128 , 24 ) ;
               this.button1.TabIndex = 1 ;
               this.button1.Text = "獲得剪切板中的數據" ;
               this.button1.Click += new System.EventHandler ( this.button1_Click ) ;
               this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
               this.ClientSize = new System.Drawing.Size ( 408 , 357 ) ;
               this.Controls.Add ( button1 );
               this.Controls.Add ( richTextBox1 );
               this.Name = "Form1";
               this.Text = "用Visual C#來保存剪切板中的數據!";
               this.ResumeLayout(false);
           }

          static void Main ( )
          {
              Application.Run ( new Form1 ( ) ) ;
          }
          private void button1_Click ( object sender , System.EventArgs e )
          { //定義一個IDataObject接口
             IDataObject d = Clipboard.GetDataObject ( ) ;
              //如果剪切板中數據是位圖,則另存為C盤的my.bmp文件
              if ( d.GetDataPresent ( DataFormats.Bitmap ) )
              {
                  //出箱
                  Bitmap b = ( Bitmap ) d.GetData ( DataFormats.Bitmap ) ;
                  b.Save ( @"c:/my.bmp" ) ;
                  MessageBox.Show ( "當前剪切板內容是位圖,已經保存到"MY.BMP"文件中!" ) ;
               } //如果是文本,則用窗體中的RichText組件顯示文本內容。
               else if ( d.GetDataPresent ( DataFormats.Text ) )
               {
                    //出箱
                    String c = ( String ) d.GetData ( DataFormats.Text ) ;
                    richTextBox1.Text = c ;
                }
               else
               {
                    MessageBox.Show ( "剪切板中是其他類型的數據!" ) ;
                }
         }
    }

7、 總結:

本文介紹了在用Visual C#進行剪切板編程的二個重要方面的內容,即:判定剪切板中的數據和保存剪切板中的數據。其實針對剪切板的編程用途是比較廣的,譬如有了上面的知識做鋪墊,我想如果要你用Visual C#開發一個抓圖程序,你一定不會說很難吧!

使用Visual C#操作剪切板看來并復雜,主要得有思路。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 粉嫩av一区二区三区四区在线观看 | 特级无码毛片免费视频尤物 | 国产精品99久久久久久大便 | 蜜桃网站在线观看 | a一级黄色毛片 | 欧美人与禽性xxxxx杂性 | 视频一区 日韩 | 92看片淫黄大片欧美看国产片 | 一级黄色在线观看 | 成人免费在线视频播放 | 国产精品久久久久久久久岛 | 久久久新| 黄色网址你懂的 | 午夜在线观看视频网站 | 91精品国 | 毛片视频网站在线观看 | 久久精品视频1 | 久久久一区二区三区四区 | 全黄性性激高免费视频 | 欧美区在线| 国产一区二区在线免费观看 | 成人国产免费观看 | av国语| 韩国三级日本三级香港三级黄 | 97中文字幕第一一一页 | 伊久在线| xnxx18日本 | 国产羞羞视频在线观看 | 毛片a级毛片免费播放100 | 免费国产在线视频 | 黄色网址免费在线播放 | 激情久久免费视频 | 娇喘在线| 一区二区三区精品国产 | 午夜激情视频免费 | 精品亚洲夜色av98在线观看 | 羞羞的小视频 | 日本xxxx视频 | 日韩伦理电影免费观看 | 黄色羞羞视频在线观看 | 羞羞电影在线观看 |