分享
 
 
 

Visual C#的剪切板編程

王朝c#·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

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

bpf

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

}}2sT

一. 本文程序設計和運行的環境AlgsBE

_F

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

(2)..Net FrameWork SDK Beta 2Kc+4

f[fMEY

二. 介紹程序中使用到的類和接口^5"^U

Qb

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

eU@>M

三. Visual C#判定剪切板數據類型的解決思路以及重要步驟的解決辦法J!

&M

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

wP;P

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

fUac

IDataObject d = Clipboard.GetDataObject ( ) ;\(OQ

)6u}

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

}

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

-

if ( d.GetDataPresent ( Dataformats.Bitmap ) ) {*

Console.WriteLine ( "當前剪切板中的數據類型是位圖!" ) ;D*

} else if ( d.GetDataPresent ( Dataformats.Text ) ) {o"=8P

Console.WriteLine ( "當前剪切板中的數據類型是文本!" ) ;%3b

} else if ( d.GetDataPresent ( Dataformats.Html ) ) {.en cA

Console.WriteLine ( "當前剪切板中的數據類型是超文本!" ) ;\<

} else {Pr

Console.WriteLine ( "當前剪切板中的數據類型是其他類型數據!" ) ;+_N

} j

L6E

四. 程序源代碼6Zt

ro9B*

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

u

using System ;Tl

using System.Windows.forms ;ARn

public class MyClipboard_`3O

{ yR`8``

public static void Main ( string [ ] args )!I

{ $qcPj7

IDataObject d = Clipboard.GetDataObject ( ) ;|ECJ

yNhq

if ( d.GetDataPresent ( Dataformats.Bitmap ) ) {=?H

Console.WriteLine ( "當前剪切板中的數據類型是位圖!" ) ;|Lg8&

} else if ( d.GetDataPresent ( Dataformats.Text ) ) {ogC](<

Console.WriteLine ( "當前剪切板中的數據類型是文本!" ) ; xzNR

} else if ( d.GetDataPresent ( Dataformats.Html ) ) {YO{^

Console.WriteLine ( "當前剪切板中的數據類型是超文本!" ) ;Mj

} else {\y_

Console.WriteLine ( "當前剪切板中的數據類型是其他類型數據!" ) ;Pmj>

} Scf5

} #;c.>"

} o^jQyB

五. Visual C#保存剪切板數據的解決思路以及重要步驟的解決辦法Ow%O

|

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

!

object GetData ( Type ) ;4yD

xfwTf

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

3.rmmR

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

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

2NR)D_

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

3FC~

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

<uDW

Bitmap b = ( Bitmap ) d.GetData ( Dataformats.Bitmap ) ;e

b.Save ( @"c:\my.bmp" ) ;Qqz's

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

+(

六. 用Visual C#讀取當前剪切板中數據內容並保存的程序源代碼rXT@>f

>pua

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

using System ;>HDP<Q

using System.Drawing ;=y5

using System.Collections ;u@lzX

using System.ComponentModel ;}wPq{C

using System.Windows.forms ;]*}~:D

using System.Data;c

public class form1 : formR4O34

{ TbpHa=

private RichTextBox richTextBox1 ;";0

private Button button1 ;IA

private System.ComponentModel.Container components = null ;Ec-d

public form1()\^49j

{ r

//初始化窗體中的各個組件d%Xnd

InitializeComponent ( ) ;VEM

} 0#&-g

//清除程序中使用過的資源juF1~I

protected override void Dispose ( bool disposing )c`4Ees

{ @

if ( disposing )T

{ kZ.

if ( components != null ) *O

{ hD+:

components.Dispose ( ) ;sh$'

} &N]^?

} G2

base.Dispose ( disposing );'#

} [

private void InitializeComponent ( )_6

{ YC+

this.richTextBox1 = new RichTextBox ( ) ;qI[

this.button1 = new Button ( ) ;P

this.SuspendLayout ( ) ;tH

a.UZv

this.richTextBox1.Location = new System.Drawing.Point ( 40 , 16 ) ;*

this.richTextBox1.Name = "richTextBox1" ;HR

this.richTextBox1.Size = new System.Drawing.Size ( 336 , 264 ) ;.k`/%

this.richTextBox1.TabIndex = 0 ;jbKg

this.richTextBox1.Text = "" ;2:+

<<

this.button1.Location = new System.Drawing.Point ( 128 , 304 ) ;T-JsKw

this.button1.Name = "button1" ;#dnK&

this.button1.Size = new System.Drawing.Size ( 128 , 24 ) ;_+R:]U

this.button1.TabIndex = 1 ;d^D-

this.button1.Text = "獲得剪切板中的數據" ;M

this.button1.Click += new System.EventHandler ( this.button1_Click ) ;5BEhF

S7p

this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;=j>

this.ClientSize = new System.Drawing.Size ( 408 , 357 ) ;SZU2D

this.Controls.Add ( button1 );-Jr

this.Controls.Add ( richTextBox1 );vzws?

this.Name = "form1";vUd2J

this.Text = "用Visual C#來保存剪切板中的數據!";YvQg

this.ResumeLayout(false);0f

&IZz[

} y5

static void Main ( ) Tq_b

{ s&/4M

Application.Run ( new form1 ( ) ) ;)SFIN

} ;ZP

private void button1_Click ( object sender , System.EventArgs e )y

{ //定義一個IDataObject接口\*bnP

IDataObject d = Clipboard.GetDataObject ( ) ;.3qw

//如果剪切板中數據是位圖,則另存為C盤的my.bmp文件ZJo_hO

if ( d.GetDataPresent ( Dataformats.Bitmap ) ) Nq

{ X|/

//出箱-

Bitmap b = ( Bitmap ) d.GetData ( Dataformats.Bitmap ) ;`6

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

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

} //如果是文本,則用窗體中的RichText組件顯示文本內容。2

else if ( d.GetDataPresent ( Dataformats.Text ) ) kzhk

{ 1<4F6@

//出箱C,x

String c = ( String ) d.GetData ( Dataformats.Text ) ; WC<C

richTextBox1.Text = c ;lu`%iZ

} 6L6l'w

else 7:

{ ^8)

MessageBox.Show ( "剪切板中是其他類型的數據!" ) ;}=

} H

} h(Kx

} G&`

N2EV

七. 總結bK

in4Q9

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有