您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“C#如何實現(xiàn)聊天窗體以及抖動功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
本文實例為大家分享了C#實現(xiàn)聊天窗體以及抖動的具體代碼,供大家參考,具體內(nèi)容如下
1、聊天窗體的要求?
(1)由兩個文本框組以及兩個按鈕組成(一個只讀框,一個輸入框與取消按鈕,一個發(fā)送按鈕)
(2)只讀框就是只讀,并且沒有焦點,并且消息發(fā)送多了以后會自動往下滾動,并且有滾動條
(3)輸入框就是有焦點,可以輸入消息
(4)取消按鈕就是按下按鈕后輸入框中的內(nèi)容消失
(5)發(fā)送按鈕就是點擊或者按下Enter鍵后發(fā)送輸入框中的內(nèi)容
2、C#如何實現(xiàn)
(1)將窗體居中(2種方法)
①使用CenterToScreen()這個方法
this.CenterToScreen();//使窗體再當前顯示器中居中
②使用公式
要想使窗體居中,就必須計算窗體左邊緣與容器工作區(qū)左邊緣之間距離以及控件上邊緣與容器工作區(qū)上邊緣之間的距離
this.Left = Screen.PrimaryScreen.WorkingArea.Width / 2 - this.Width/2; //控件左邊緣與容器工作區(qū)左邊緣之間的距離=顯示器工作區(qū)域的寬度/2-控件的寬度/2 this.Top = Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Height/2; //控件行編譯與容器工作區(qū)上邊緣之間的距離=顯示器工作區(qū)域的高度/2-控件的高度/21
(2)給窗體一個名字,以及大小,背景顏色
this.Text = "與吳京正在聊天中....."; this.Size = new Size(680, 500); this.BackColor = Color.PowderBlue;
(3)插入只讀框textbox并設置大小,并且只讀
那么該如何設置大小呢,它的寬是可以拉動的,但是高不行,所以必須設置Multiline這個屬性才可以設置高度,然后,只讀的話就是ReadOnly這個屬性。
textBox1.Multiline = true;//設置可以多行顯示 textBox1.Size = new Size(630, 250); textBox1.ReadOnly = true;//設置控件中的文本內(nèi)容只讀
(4)插入輸入框textbox,并設置大小
textBox2.Multiline = true;//設置textbox2可以多行顯示 textBox2.Size = new Size(textBox1.Width, 100);
此時,我們發(fā)現(xiàn)一個問題,就是鼠標的焦點跑到了只讀框中,所以此時就應該使用TabIndex這個屬性來將鼠標的默認焦點給輸入框,它的值是0就是打開
textBox2.TabIndex = 0;//獲取textbox2的默認焦點
(5)插入兩個按鈕,一個叫取消,一個叫發(fā)送,并且他們的大小都是一樣的,背景顏色和字體顏色也是一樣的
//buttom1的屬性 button1.Size = new Size(60, 30);//設置button1的寬為60像素高為30像素 button1.Text = "取消";//設置button1的文本內(nèi)容 button1.ForeColor = Color.White;//設置字體顏色 button1.BackColor = Color.MediumSeaGren;//設置背景顏色
//button2的屬性 button2.Size = new Size(button1.Width, button1.Height);//設置button2的寬和高與button1一樣 button2.Text = "發(fā)送"; button2.ForeColor = Color.White; button2.BackColor = Color.MediumSeaGreen;
(6)按下發(fā)送,輸入框中的內(nèi)容發(fā)送給了只讀框,并且輸入框中的內(nèi)容消失,此時,鼠標的焦點還在輸入框中,但是按下空格發(fā)送或者直接發(fā)送,不能發(fā)送,并且鼠標焦點還在,而且是在輸入框最左邊的位置。
①這里我們要用到if判斷它是不是空字符或者是空格,如果是就不發(fā)送,否則就發(fā)送,必須在發(fā)送按鈕下進行。
string.IsNullOrWhiteSpace 表示指示指定的字符串是null、空還是僅由空白字符組成。
Focus() 表示獲取輸入后的焦點。
實現(xiàn)發(fā)送功能實則就是把輸入框中的內(nèi)容賦值給只讀框。
然后發(fā)送完后輸入框中的內(nèi)容消失,可以用空的字符串代替
if (string.IsNullOrWhiteSpace(textBox2.Text))//判斷textbox2中輸入的內(nèi)容是否為空或者空格 { textBox2.Focus();//獲取輸入焦點 textBox2.Text = "";//假如輸入空格就將textbox2中的內(nèi)容清空 } else { textBox1.Text+= "挪威的森林 2024415986" + DateTime.Now + "\r\n" + "\r\n" + textBox2.Text + "\r\n" + "\r\n"; textBox2.Text = "";//內(nèi)容發(fā)送給textbox1后清空textbox2中的內(nèi)容 } //+號表示鏈接上次發(fā)發(fā)送的內(nèi)容,"\r\n"表示換行
(7)此時,我們發(fā)現(xiàn)一個問題,就是當只讀框中的內(nèi)容超出范圍后,它就不再顯示
那么,該如何解決這個問題呢?這里我們可以引入一個屬性和一個方法
①SelectionStart 表示獲取文本范圍的起始點 或者 Select來獲取文本范圍
②ScrollToCaret() 表示將控件內(nèi)容滾動到當前插入符號位置
通過這兩行代碼就可以解決這個問題,必須在只讀框中寫
textBox1.SelectionStart = textBox1.TextLength;//獲取textbox1中的文本范圍的起始點 textBox1.ScrollToCaret();//將控件內(nèi)容滾動到插入符號位置
(8)按下發(fā)送后取消輸入框中的內(nèi)容
這個就可以用空的字符串來代替,但是必須在取消按鈕的事件當中寫
//取消后觸發(fā)的事件 private void button1_Click(object sender, EventArgs e) { textBox2.Text = ""; }
(9)按下Enter鍵發(fā)送內(nèi)容
這里要使用到一個方法,AcceptButton這個屬性,但是這個屬性只有在窗體中才能找到。
AcceptButton 表示獲取或設置當前用戶按Enter鍵時所單擊的窗體上的按鈕
this.AcceptButton = this.button2;//按下Enter鍵觸發(fā)button2中的事件
1、窗體抖動的原理
實質(zhì)就是:窗體位置的改變和快速移動。
第一步:
使窗體在顯示器中居中,并設置窗體的文本
this.CenterToScreen();//使窗體在當前顯示器中居中 this.Text = "抖一抖";
第二步:
插入按鈕,并設置按鈕的大小和文本內(nèi)容
this.button1.Size = new Size(80, 40); button1.Text = "抖一抖";
第三步:
就是設置窗體的位置了,那么它位置的改變就是從窗體居中后的位置左上角的位置開始順時針移動改變。
那么它改變的規(guī)律是什么?
是先從初始的位置(就是劇中后左上角的位置往右移動=》再往下=》往左=》往左=》往上=》往上=》往右=》往右=》往下=》往左。最終回到初始位置
要用到location這個屬性
但是,每次移動后都要讓他停留幾毫秒,所以,就要用到線程這個概念。
那么,什么是線程?
Thread線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位,它被包涵在進程之中,是行程中的實際運作單位。
Thread.Sleep(); 表示當前線程掛起指定的毫秒數(shù)
Thread.Sleep(20);//線程控制20毫秒
但是,位置改變一圈后回到初始位置不是抖動,所以,必須使用for循環(huán)讓他多次移動來實現(xiàn)抖動的效果
源碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace 窗體抖動 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.CenterToScreen();//使窗體在當前顯示器中居中 this.Text = "抖一抖"; this.button1.Size = new Size(80, 40); button1.Text = "抖一抖"; this.AcceptButton = this.button1; } private void Form1_douyidou(object sender, EventArgs e) { for (int i = 0; i < 2; i++) { //①往右 this.Location = new Point(this.Left + 10, this.Top); Thread.Sleep(20);//線程控制20毫秒 //②往下 this.Location = new Point(this.Left, this.Top + 10); Thread.Sleep(20); //③往左 this.Location = new Point(this.Left - 10, this.Top); Thread.Sleep(20); //④往左 this.Location = new Point(this.Left - 10, this.Top); Thread.Sleep(20); //⑤往上 this.Location = new Point(this.Left, this.Top - 10); Thread.Sleep(20); //⑥往上 this.Location = new Point(this.Left, this.Top - 10); Thread.Sleep(20); //⑦往右 this.Location = new Point(this.Left + 10, this.Top); Thread.Sleep(20); //⑧往右 this.Location = new Point(this.Left + 10, this.Top); Thread.Sleep(20); //⑨往下 this.Location = new Point(this.Left, this.Top + 10); Thread.Sleep(20); //十一往左 this.Location = new Point(this.Left - 10, this.Top); Thread.Sleep(20); } } } }
“C#如何實現(xiàn)聊天窗體以及抖動功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。