c#類似于QQ表情彈出框功能的二種實(shí)現(xiàn)方法_第1頁
c#類似于QQ表情彈出框功能的二種實(shí)現(xiàn)方法_第2頁
c#類似于QQ表情彈出框功能的二種實(shí)現(xiàn)方法_第3頁
c#類似于QQ表情彈出框功能的二種實(shí)現(xiàn)方法_第4頁
c#類似于QQ表情彈出框功能的二種實(shí)現(xiàn)方法_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、c# 類似于 QQ 表情彈出框功能的二種實(shí)現(xiàn)方法c# 類似于 QQ 表情彈出框功能的二種實(shí)現(xiàn)方法以下是做項(xiàng)目時(shí)實(shí)現(xiàn)的二種類似于 QQ 表情彈出框功能的實(shí)現(xiàn)方法,方法一采用 DataGridView 實(shí)現(xiàn),方法二通過ToolStripDropDown 實(shí)現(xiàn)。一先貼出實(shí)現(xiàn)效果。方法一 DataGridView 效果方法二 ToolStripDropDown 效果二 二種方法實(shí)現(xiàn)的對比:方法一 效果類似于 QQ , 鼠標(biāo)放在上面時(shí), 可以看到顯示的效果,但加裁速度有些慢。方法二的效果類似于 MSN ,加裁速度比較快,鼠標(biāo)放在上面時(shí)能顯示圖片的 ToolTipText 。三 實(shí)現(xiàn)源代碼( 1 ) 方法

2、一。該方法是把圖片的位置值存放到DataGridVeiw 各個(gè)單元格中,在 DataGridView 的 dataGridView1_CellFormatting 。 這里使用到了 e.Value 中的 Object 類型。由于 e.Value 為 Object 類型,所以可以直接 顯示圖片。private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)/如果值不為空 if(e.Value!=null) string path = e.Value.ToString()

3、;/ 得到路 徑值e.Value = GetImage(path);/ 根據(jù)路徑值獲取圖片。因?yàn)?e.Value 是 Object ,圖片文件可以直接顯示 elsee.Value = Properties.Resources.snow;/ 默讀背景圖片在 GetImage 方法中, 讀取圖片時(shí)采用 File.OpenRead(path)方法,該方法可以防止圖片文件正在被另一程序訪問或只讀或未釋放。 如果采用 Image.FormFile () 則可能會出現(xiàn)異常。/ / 加裁圖片/ / / private object GetImage(string path)tryFileStream fs

4、= File.OpenRead(path);/調(diào)用該方法,可以防止文件正在防問或只讀或被鎖定狀態(tài)int filelength = 0;filelength = (int)fs.Length; / 獲得文件長Byte image = new Bytefilelength; /按字節(jié)建立一個(gè)字節(jié)數(shù)組fs.Read(image, 0, filelength); /流讀取System.Drawing.Image result =System.Drawing.Image.FromStream(fs);fs.Close();return result;catch (Exception) return nu

5、ll;PictureBox 顯示圖片DataGridViewCellStyle sty = newDataGridViewCellStyle();sty.BackColor = Color.Snow;object path =dataGridView1.Rowse.RowIndex.Cellse.ColumnIndex.V alue;foreach (DataGridViewRow row indataGridView1.Rows)foreach (DataGridViewCell cell inrow.Cells)cell.Style = sty;DataGridViewCellStyle

6、sty2 = newDataGridViewCellStyle();sty2.BackColor = Color.Blue;if (path != null)dataGridView1.Rowse.RowIndex.Cellse.ColumnIndex.S tyle = sty2;Bitmap.FromFile(path.ToString();if (e.RowIndex 4 &e.ColumnIndex 4)pictureBox1.Visible = false;pictureBox31.Visible = true;elsepictureBox1.Visible = true;pictur

7、eBox31.Visible = false;pictureBox1.Image = img;pictureBox31.Image = img;elsepictureBox1.Image =Properties.Resources.snow;pictureBox31.Image =Properties.Resources.snow;以上就是方法一的主要實(shí)現(xiàn)過程,該方法有一個(gè)不好的地方就是速度比較慢,因?yàn)?dataGridView1_CellFormatting 事件 發(fā)生太頻繁,導(dǎo)致一直在加裁圖片。以下為完整代碼:代碼private string facepath = string.Empty

8、;public static string ImageName =string.Empty;publicEventHandler FaceCellClick;publicfrmFace( string path)InitializeComponent();if(!path.EndsWith()10path = path + ;facepath = path;GetData();pictureBox1.Visible= false;pictureBox31.Visible= false;/ / 加裁圖片并添枝加葉到 DataGridViewa/ private void GetData()str

9、ing files =Directory.GetFiles(facepath, *.gif);/ 獲取圖片int colomn = 0;int row = 0;DataGridViewRow dgvRow;dataGridView1.Rows.Add(newDataGridViewRow();foreach (string s in files)if (!s.EndsWith(snow.gif)/ 排除snow.gif3031 dataGridView1.Rowsrow.Cellscolomn.Value = s;colomn+;if (colomn =10)/增加到 DataGridView

10、dataGridView1.Rows.Add(new DataGridViewRow();row+;colomn = 0; TOC o 1-5 h z / / 單元格格式化/ / / private voiddataGridView1_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e) TOC o 1-5 h z if(e.Value!=null)string path = e.Value.ToString();e.Value = GetImage(path);elsee.Value =Properties.R

11、esources.snow;/ / 得到圖片/private object GetImage(stringpath)try676869FileStream fs =File.OpenRead(path);70int filelength = 0;71filelength = (int)fs.Length; / 獲得文件長度72Byte image = new Bytefilelength;/建立一個(gè)字節(jié)數(shù)組73fs.Read(image, 0, filelength); / 按字節(jié)流讀取74System.Drawing.Image result =System.Drawing.Image.Fr

12、omStream(fs);75fs.Close();76return result;777879catch (Exception)808281return null;83/單元格點(diǎn)擊事件/private void dataGridView1_CellClick(objectsender, DataGridViewCellEventArgs e) TOC o 1-5 h z if (FaceCellClick != null)tryobject path =dataGridView1.Rowse.RowIndex.Cellse.ColumnIndex.V alue;if (path != nul

13、l)ImageName =path.ToString().Substring(path.ToString().LastIndexOf() );101111this.DialogResult =else TOC o 1-5 h z 102103ImageName =string.Empty; 104105106catch107108ImageName = string.Empty;109110System.Windows.Forms.DialogResult.OK;112113/ 114/ 鼠標(biāo)通過時(shí)顯示效果115/116/ 117/ 118private void dataGridView1_

14、CellMouseMove(object sender,DataGridViewCellMouseEventArgs e)119120DataGridViewCellStyle sty = newDataGridViewCellStyle();121sty.BackColor = Color.Snow;122123object path =dataGridView1.Rowse.RowIndex.Cellse.ColumnIndex.V alue;124foreach (DataGridViewRow row indataGridView1.Rows) TOC o 1-5 h z 125126

15、foreach (DataGridViewCell cell inrow.Cells)127128cell.Style = sty;129130131DataGridViewCellStyle sty2 = newDataGridViewCellStyle();132sty2.BackColor = Color.Blue;134135dataGridView1.Rowse.RowIndex.Cellse.ColumnIndex.Style = sty2;136Image img =Bitmap.FromFile(path.ToString();137if (e.RowIndex 4 &e.Co

16、lumnIndex 4)138139pictureBox1.Visible = false;140pictureBox31.Visible = true;141142else143144pictureBox1.Visible = true;145pictureBox31.Visible = false;146147148pictureBox1.Image = img;149pictureBox31.Image = img;150151else152153pictureBox1.Image =Properties.Resources.snow;154pictureBox31.Image =Pro

17、perties.Resources.snow;155156方法二 通過 ToolStripDropDown( HYPERLINK /zh-cn/library/system.windows /zh-cn/library/system.windows.forms.toolstripdropdown_methods.aspx )實(shí)現(xiàn) .ToolStripLayoutStyle 值:1TableFlowStackWithOverflowHorizontalStackWithOverflowVerticalStackWithOverflow 。如果 LayoutStyle 屬性設(shè)置為 Flow 或 T

18、able , 將不會顯示大小調(diào)整手柄。這里設(shè)置 emotionDropDown.LayoutStyle =ToolStripLayoutStyle.Table;/ 設(shè)置布局 .主要實(shí)現(xiàn)代碼為private ToolStripDropDown emotionDropDown = new ToolStripDropDown();代碼private void UCChatForm_Load(object sender,EventArgs e)lock (richtxtChat.Emotions)richtxtChat.Emotions:) =Properties.Resources.face01;/

19、微笑face01richtxtChat.Emotions:D =Properties.Resources.face02;/大笑face02richtxtChat.Emotions:-o =Properties.Resources.face03;/驚訝face03richtxtChat.Emotions:P =Properties.Resources.face05;/ 熱烈的笑臉face05richtxtChat.Emotions: =Properties.Resources.face06;/生氣face06 TOC o 1-5 h z richtxtChat.Emotions:S=Proper

20、ties.Resources.face07;/困惑face07richtxtChat.Emotions:$=Properties.Resources.face08;/尷尬face08richtxtChat.Emotions:(=Properties.Resources.face09;/悲傷face09richtxtChat.Emotions:(=Properties.Resources.face10;/ 哭泣的臉 face10richtxtChat.Emotions:| =Properties.Resources.face11;/失望face11richtxtChat.Emotions(A)

21、=Properties.Resources.face12;/天使face12richtxtChat.Emotions8o| =Properties.Resources.face13;/ 咬牙切齒 face13richtxtChat.Emotions8-| =Properties.Resources.face14;/ 書呆子 face14richtxtChat.Emotions+o( =Properties.Resources.face16;/ 聚會笑臉 face16richtxtChat.Emotions|-) =Properties.Resources.face17;/ 困了 face17r

22、ichtxtChat.Emotions*-) =Properties.Resources.face18;/ 正在思考 face18richtxtChat.Emotions:-* =Properties.Resources.face19;/ 悄悄話 face19richtxtChat.Emotions:-# =Properties.Resources.face20;/ 保守秘密 face2025richtxtChat.EmotionsAo)”=Properties.Resources.face21;/ 諷刺 face2126richtxtChat.Emotions8-) =Properties.

23、Resources.face22;/ 轉(zhuǎn)動眼睛 face2227richtxtChat.Emotions(L) =Properties.Resources.face23;/ 紅心 face2328richtxtChat.Emotions(U) =Properties.Resources.face24;/ 破碎的心 face2429richtxtChat.Emotions(M)=Properties.Resources.face25;/Messenger face2530richtxtChat.Emotions()=Properties.Resources.face27;/狗臉face2732r

24、ichtxtChat.Emotions(sn) =Properties.Resources.face28;/蝸牛face2833richtxtChat.Emotions(bah) =Properties.Resources.face29;/黑羊face2934richtxtChat.Emotions(S) =Properties.Resources.face30;/ 沉睡的彎月 face3035richtxtChat.Emotions(*) =Properties.Resources.face31;/星星face3136richtxtChat.Emotions(#) =Properties.R

25、esources.face32;/太陽face3237richtxtChat.Emotions(R) =Properties.Resources.face33;/握手face3338richtxtChat.Emotions() =Properties.Resources.face34;/左側(cè)擁抱face3439richtxtChat.Emotions() =Properties.Resources.face35;/右側(cè)擁抱face3540richtxtChat.Emotions(K) =Properties.Resources.face36;/ 紅唇 face3641richtxtChat.E

26、motions(F) =Properties.Resources.face38;/ 凋謝的玫瑰face38 TOC o 1-5 h z 43richtxtChat.Emotions(O)=Properties.Resources.face39;/ 時(shí)鐘 face3944richtxtChat.Emotions(Y)=Properties.Resources.face40;/太棒了face4045richtxtChat.Emotions(N)=Properties.Resources.face41;/太差了face4146richtxtChat.Emotions(C) =Properties.R

27、esources.face42;/ 咖啡 face4247richtxtChat.Emotions(E) =Properties.Resources.face43;/ 電子郵件 face4348richtxtChat.Emotions(li) =Properties.Resources.face44;/閃電face4449richtxtChat.Emotions(I) =Properties.Resources.face45;/燈泡face4550richtxtChat.Emotions(T) =Properties.Resources.face46;/ 電話聽筒 face4651richtx

28、tChat.Emotions(8) =Properties.Resources.face47;/ 音符 face4752c.Emotions(mp) =53richtxtChat.Emotions(A)”=Properties.Resources.face49;/ 生日蛋糕 face4954richtxtChat.Emotions(G) =Properties.Resources.face50;/ 禮品盒 face5055565758emotionDropDown.ImageScalingSize =new Size(15, 15);/ 圖片大小emotionDropDown.LayoutSt

29、yle =ToolStripLayoutStyle.Table;/ 設(shè)置布局foreach (string str inrichtxtChat.Emotions.Keys)emotionDropDown.Items.Add(null,richtxtChat.Emotionsstr, emotion_Click).ToolTipText = GetToolTipText(str);(TableLayoutSettings)emotionDropDown.LayoutSettings).ColumnCount = 13;/ 設(shè)置每行顯示數(shù)目66其中 richtxtChat 為 RtfRichTex

30、tBox 。在這里設(shè)置每行顯示13 個(gè)。顯示注釋的方法GetToolTipText ( str ) :代碼/ / 顯示表情注釋/ / 圖釋KEY/ private string GetToolTipText(string str)switch (str)case :):str = 微笑 + str;break;case :D:str = 大笑 + str;break;case :-o:str = 驚訝 + str;break;case :P:str = 吐舌笑臉 + str;break;case (H):str = 熱烈的笑臉 + str;break;case :str = 生氣 + str;

31、break;case :S:str = 困惑 + str;break;case :$:str = 尷尬 + str;break;case :(:str = 悲傷 + str;break;case :(:str = 哭泣 + str;break;case :|:str = 失望 + str;break;case (A):str = 天使 + str;break;case 8o|:str = 咬牙切齒 + str;break;case 8-|:str = 書呆子 + str;break;case +o(:str = 生病 + str;break;case :o):str = 聚會笑臉 + str;

32、break;case |-):str = 困了 + str;break;case *-):str = 正在思考 + str;break;case :-*:str = 悄悄話 + str;break;case :-#:str = 保守秘密 + str;break;case Ao):str = 諷刺 + str;break;case 8-):str = 轉(zhuǎn)動眼睛 + str;break;case (L):str = 紅心 + str;break;case (U):str = 破碎的心 + str;break;case (M):str = Messenger + str;break;case ():str = 貓臉 + str;break

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論