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

C#實(shí)現(xiàn)聊天窗體以及抖動(dòng)

 更新時(shí)間:2021年07月11日 10:52:26   作者:御弟謌謌  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)聊天窗體以及抖動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#實(shí)現(xiàn)聊天窗體以及抖動(dòng)的具體代碼,供大家參考,具體內(nèi)容如下

一、聊天窗體案例

1、聊天窗體的要求?

(1)由兩個(gè)文本框組以及兩個(gè)按鈕組成(一個(gè)只讀框,一個(gè)輸入框與取消按鈕,一個(gè)發(fā)送按鈕)

(2)只讀框就是只讀,并且沒(méi)有焦點(diǎn),并且消息發(fā)送多了以后會(huì)自動(dòng)往下滾動(dòng),并且有滾動(dòng)條

(3)輸入框就是有焦點(diǎn),可以輸入消息

(4)取消按鈕就是按下按鈕后輸入框中的內(nèi)容消失

(5)發(fā)送按鈕就是點(diǎn)擊或者按下Enter鍵后發(fā)送輸入框中的內(nèi)容

2、C#如何實(shí)現(xiàn)

(1)將窗體居中(2種方法)

①使用CenterToScreen()這個(gè)方法

this.CenterToScreen();//使窗體再當(dāng)前顯示器中居中

②使用公式

要想使窗體居中,就必須計(jì)算窗體左邊緣與容器工作區(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)給窗體一個(gè)名字,以及大小,背景顏色

this.Text = "與吳京正在聊天中.....";
this.Size = new Size(680, 500);
this.BackColor = Color.PowderBlue;

(3)插入只讀框textbox并設(shè)置大小,并且只讀

那么該如何設(shè)置大小呢,它的寬是可以拉動(dòng)的,但是高不行,所以必須設(shè)置Multiline這個(gè)屬性才可以設(shè)置高度,然后,只讀的話就是ReadOnly這個(gè)屬性。

textBox1.Multiline = true;//設(shè)置可以多行顯示
textBox1.Size = new Size(630, 250);
textBox1.ReadOnly = true;//設(shè)置控件中的文本內(nèi)容只讀

(4)插入輸入框textbox,并設(shè)置大小

textBox2.Multiline = true;//設(shè)置textbox2可以多行顯示
textBox2.Size = new Size(textBox1.Width, 100);

此時(shí),我們發(fā)現(xiàn)一個(gè)問(wèn)題,就是鼠標(biāo)的焦點(diǎn)跑到了只讀框中,所以此時(shí)就應(yīng)該使用TabIndex這個(gè)屬性來(lái)將鼠標(biāo)的默認(rèn)焦點(diǎn)給輸入框,它的值是0就是打開(kāi)

textBox2.TabIndex = 0;//獲取textbox2的默認(rèn)焦點(diǎn)

(5)插入兩個(gè)按鈕,一個(gè)叫取消,一個(gè)叫發(fā)送,并且他們的大小都是一樣的,背景顏色和字體顏色也是一樣的

//buttom1的屬性
button1.Size = new Size(60, 30);//設(shè)置button1的寬為60像素高為30像素
button1.Text = "取消";//設(shè)置button1的文本內(nèi)容
button1.ForeColor = Color.White;//設(shè)置字體顏色
button1.BackColor = Color.MediumSeaGren;//設(shè)置背景顏色
//button2的屬性
button2.Size = new Size(button1.Width, button1.Height);//設(shè)置button2的寬和高與button1一樣
button2.Text = "發(fā)送";
button2.ForeColor = Color.White;
button2.BackColor = Color.MediumSeaGreen;

(6)按下發(fā)送,輸入框中的內(nèi)容發(fā)送給了只讀框,并且輸入框中的內(nèi)容消失,此時(shí),鼠標(biāo)的焦點(diǎn)還在輸入框中,但是按下空格發(fā)送或者直接發(fā)送,不能發(fā)送,并且鼠標(biāo)焦點(diǎn)還在,而且是在輸入框最左邊的位置。

①這里我們要用到if判斷它是不是空字符或者是空格,如果是就不發(fā)送,否則就發(fā)送,必須在發(fā)送按鈕下進(jìn)行。

string.IsNullOrWhiteSpace 表示指示指定的字符串是null、空還是僅由空白字符組成。

Focus() 表示獲取輸入后的焦點(diǎn)。

實(shí)現(xiàn)發(fā)送功能實(shí)則就是把輸入框中的內(nèi)容賦值給只讀框。

然后發(fā)送完后輸入框中的內(nèi)容消失,可以用空的字符串代替

if (string.IsNullOrWhiteSpace(textBox2.Text))//判斷textbox2中輸入的內(nèi)容是否為空或者空格
        {

​            textBox2.Focus();//獲取輸入焦點(diǎn)
​            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)容
​        }
//+號(hào)表示鏈接上次發(fā)發(fā)送的內(nèi)容,"\r\n"表示換行

(7)此時(shí),我們發(fā)現(xiàn)一個(gè)問(wèn)題,就是當(dāng)只讀框中的內(nèi)容超出范圍后,它就不再顯示
那么,該如何解決這個(gè)問(wèn)題呢?這里我們可以引入一個(gè)屬性和一個(gè)方法

①SelectionStart 表示獲取文本范圍的起始點(diǎn) 或者 Select來(lái)獲取文本范圍

②ScrollToCaret() 表示將控件內(nèi)容滾動(dòng)到當(dāng)前插入符號(hào)位置

通過(guò)這兩行代碼就可以解決這個(gè)問(wèn)題,必須在只讀框中寫(xiě)

textBox1.SelectionStart = textBox1.TextLength;//獲取textbox1中的文本范圍的起始點(diǎn)
textBox1.ScrollToCaret();//將控件內(nèi)容滾動(dòng)到插入符號(hào)位置

(8)按下發(fā)送后取消輸入框中的內(nèi)容

這個(gè)就可以用空的字符串來(lái)代替,但是必須在取消按鈕的事件當(dāng)中寫(xiě)

//取消后觸發(fā)的事件
        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = "";
 }

(9)按下Enter鍵發(fā)送內(nèi)容

這里要使用到一個(gè)方法,AcceptButton這個(gè)屬性,但是這個(gè)屬性只有在窗體中才能找到。

AcceptButton 表示獲取或設(shè)置當(dāng)前用戶按Enter鍵時(shí)所單擊的窗體上的按鈕

this.AcceptButton = this.button2;//按下Enter鍵觸發(fā)button2中的事件

二、窗體抖動(dòng)

1、窗體抖動(dòng)的原理

實(shí)質(zhì)就是:窗體位置的改變和快速移動(dòng)。

第一步:

使窗體在顯示器中居中,并設(shè)置窗體的文本

this.CenterToScreen();//使窗體在當(dāng)前顯示器中居中
this.Text = "抖一抖";

第二步:

插入按鈕,并設(shè)置按鈕的大小和文本內(nèi)容

this.button1.Size = new Size(80, 40);
     button1.Text = "抖一抖";

第三步:

就是設(shè)置窗體的位置了,那么它位置的改變就是從窗體居中后的位置左上角的位置開(kāi)始順時(shí)針移動(dòng)改變。

那么它改變的規(guī)律是什么?

是先從初始的位置(就是劇中后左上角的位置往右移動(dòng)=》再往下=》往左=》往左=》往上=》往上=》往右=》往右=》往下=》往左。最終回到初始位置

要用到location這個(gè)屬性

但是,每次移動(dòng)后都要讓他停留幾毫秒,所以,就要用到線程這個(gè)概念。

那么,什么是線程?

Thread線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位,它被包涵在進(jìn)程之中,是行程中的實(shí)際運(yùn)作單位。

Thread.Sleep(); 表示當(dāng)前線程掛起指定的毫秒數(shù)

Thread.Sleep(20);//線程控制20毫秒

但是,位置改變一圈后回到初始位置不是抖動(dòng),所以,必須使用for循環(huán)讓他多次移動(dòng)來(lái)實(shí)現(xiàn)抖動(dòng)的效果

源碼如下:

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 窗體抖動(dòng)
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

​    private void Form1_Load(object sender, EventArgs e)
​    {
​        this.CenterToScreen();//使窗體在當(dāng)前顯示器中居中
​        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);
​        }

​    }
}

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#8 的模式匹配實(shí)現(xiàn)

    C#8 的模式匹配實(shí)現(xiàn)

    這篇文章主要介紹了C#8 的模式匹配實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#操作 JSON方法匯總

    C#操作 JSON方法匯總

    本文給大家匯總了一下使用C#操作Json的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2015-10-10
  • C#中WebClient實(shí)現(xiàn)文件下載

    C#中WebClient實(shí)現(xiàn)文件下載

    本篇文章主要介紹了C#中WebClient實(shí)現(xiàn)文件下載,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • c#獲取字符串寬度的示例代碼(字節(jié)數(shù)方法)

    c#獲取字符串寬度的示例代碼(字節(jié)數(shù)方法)

    本篇文章主要介紹了c#獲取字符串寬度的示例代碼(字節(jié)數(shù)方法)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • C#圖片處理3種高級(jí)應(yīng)用

    C#圖片處理3種高級(jí)應(yīng)用

    本文介紹C#圖片處理高級(jí)應(yīng)用,這些功能并無(wú)多大技術(shù)含量。全部基于.Net Framework類庫(kù)完成,代碼中包含了C#圖片處理的一些基礎(chǔ)知識(shí),與大家分享,個(gè)人能力有限,不足之處還請(qǐng)及時(shí)指正。
    2015-10-10
  • c# 異步編程基礎(chǔ)講解

    c# 異步編程基礎(chǔ)講解

    這篇文章主要介紹了c# 異步編程的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件

    C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了如何利用C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#使用Socket發(fā)送和接收TCP數(shù)據(jù)實(shí)例

    C#使用Socket發(fā)送和接收TCP數(shù)據(jù)實(shí)例

    這篇文章主要介紹了C#使用Socket發(fā)送和接收TCP數(shù)據(jù)的實(shí)現(xiàn)方法,以實(shí)例的形式詳細(xì)講述了C#實(shí)現(xiàn)socket通信的完整實(shí)現(xiàn)過(guò)程,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#觀察者模式(Observer Pattern)實(shí)例教程

    C#觀察者模式(Observer Pattern)實(shí)例教程

    這篇文章主要介紹了C#觀察者模式(Observer Pattern),主要以一個(gè)實(shí)例的形式講述了C#觀察者模式的實(shí)現(xiàn)過(guò)程,詳細(xì)講述了接口的定義、通知及動(dòng)作的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-09-09
  • C#索引屬性用法實(shí)例分析

    C#索引屬性用法實(shí)例分析

    這篇文章主要介紹了C#索引屬性用法,實(shí)例分析了C#聲明索引屬性的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論