C\#채 팅 창 과 떨 림 실현
채 팅 창 사례
1.채 팅 창 에 대한 요구?
(1)두 텍스트 상자 그룹 과 두 단추 로 구성 되 어 있 습 니 다.(읽 기 전용 상자,입력 상자 와 취소 단추,보 내기 단추)
(2)읽 기 전용 상 자 는 읽 기 전용 이 고 초점 이 없 으 며 메 시 지 를 많이 보 내 면 자동 으로 아래로 스크롤 되 고 스크롤 바 가 있 습 니 다.
(3)입력 상자 에 초점 이 있어 메 시 지 를 입력 할 수 있 습 니 다.
(4)취소 단 추 는 단 추 를 누 르 면 입력 상자 의 내용 이 사라 집 니 다.
(5)보 내기 단 추 는 Enter 키 를 누 르 거나 눌 러 서 입력 상자 의 내용 을 보 내 는 것 이다.
2.C\#어떻게 실현
(1)창 을 가운데 로(2 가지 방법)
① CenterToScreen()을 사용 하 는 방법
this.CenterToScreen();//
② 공식 사용창 을 가운데 로 만 들 려 면 창 왼쪽 가장자리 와 용기 작업 구역 왼쪽 가장자리 사이 의 거리 와 컨트롤 상단 가장자리 와 용기 작업 구역 상단 가장자리 사이 의 거 리 를 계산 해 야 합 니 다.
this.Left = Screen.PrimaryScreen.WorkingArea.Width / 2 - this.Width/2;
// = /2- /2
this.Top = Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Height/2;
// = /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;//
(4)입력 상자 textbox 를 삽입 하고 크기 를 설정 합 니 다.
textBox2.Multiline = true;// textbox2
textBox2.Size = new Size(textBox1.Width, 100);
이때,우 리 는 마우스 의 초점 이 읽 기 전용 상자 로 달 려 가 는 것 을 발 견 했 습 니 다.따라서 이때 TabIndex 라 는 속성 을 사용 하여 마우스 의 기본 초점 을 입력 상자 에 주어 야 합 니 다.그 값 은 0 이면 열 립 니 다.
textBox2.TabIndex = 0;// textbox2
(5)두 개의 단 추 를 삽입 합 니 다.하 나 는 취소 라 고 하고 하 나 는 발송 이 라 고 합 니 다.그리고 그들의 크기 는 똑 같 습 니 다.배경 색 과 글꼴 색 도 똑 같 습 니 다.
//buttom1
button1.Size = new Size(60, 30);// button1 60 30
button1.Text = " ";// button1
button1.ForeColor = Color.White;//
button1.BackColor = Color.MediumSeaGren;//
//button2
button2.Size = new Size(button1.Width, button1.Height);// button2 button1
button2.Text = " ";
button2.ForeColor = Color.White;
button2.BackColor = Color.MediumSeaGreen;
(6)보 내 기 를 누 르 면 입력 상자 의 내용 을 읽 기 전용 상자 에 보 내 고 입력 상자 의 내용 이 사라 집 니 다.이때 마우스 의 초점 은 입력 상자 에 있 지만 빈 칸 을 누 르 면 보 내 거나 직접 보 내 면 보 낼 수 없고 마우스 의 초점 이 남아 있 으 며 입력 상자 의 맨 왼쪽 에 있 습 니 다.① 여기 서 우 리 는 if 로 빈 문자 나 빈 칸 인지 판단 해 야 한다.만약 에 보 내지 않 으 면 보 내 고 보 내 려 면 보 내기 버튼 에서 해 야 한다.
string.IsNullOrWhiteSpace 는 지정 한 문자열 이 null 인지,비어 있 는 지,공백 문자 로 만 구성 되 어 있 는 지 표시 합 니 다.
Focus()는 입력 후의 초점 을 가 져 오 는 것 을 표시 합 니 다.
전송 기능 을 실현 하 는 것 은 입력 상자 의 내용 을 읽 기 전용 상자 에 할당 하 는 것 입 니 다.
그리고 보 낸 후 입력 상자 의 내용 이 사라 지면 빈 문자열 로 대체 할 수 있 습 니 다.
if (string.IsNullOrWhiteSpace(textBox2.Text))// textbox2
{
textBox2.Focus();//
textBox2.Text = "";// textbox2
}
else
{
textBox1.Text+= " 2024415986" + DateTime.Now + "\r
" + "\r
" + textBox2.Text + "\r
" + "\r
";
textBox2.Text = "";// textbox1 textbox2
}
//+ ,"\r
"
(7)이때 우 리 는 읽 기 상자 의 내용 이 범 위 를 넘 으 면 더 이상 표시 되 지 않 는 다 는 문 제 를 발견 했다.그렇다면 이 문 제 를 어떻게 해결 해 야 할 까?여기 서 우 리 는 하나의 속성 과 방법 을 도입 할 수 있다.
① Selection Start 는 텍스트 범 위 를 가 져 오 는 시작 점 이나 Select 를 표시 하여 텍스트 범 위 를 가 져 옵 니 다.
② ScrollToCaret()는 컨트롤 내용 을 현재 기호 삽입 위치 로 스크롤 합 니 다.
이 두 줄 의 코드 를 통 해 이 문 제 를 해결 할 수 있 으 니,반드시 읽 기 전용 상자 에 써 야 한다.
textBox1.SelectionStart = textBox1.TextLength;// textbox1
textBox1.ScrollToCaret();//
(8)발송 을 누 르 면 입력 상자 의 내용 을 취소 합 니 다.이것 은 빈 문자열 로 대체 할 수 있 지만 취소 단추 의 이벤트 에 써 야 합 니 다.
//
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = "";
}
(9)Enter 키 를 눌 러 내용 보 내기AcceptButton 이라는 속성 을 사용 하 는 방법 이 있 습 니 다.하지만 이 속성 은 창 에서 만 찾 을 수 있 습 니 다.
AcceptButton 은 현재 사용자 가 Enter 키 를 눌 렀 을 때 누 른 창의 단 추 를 가 져 오 거나 설정 합 니 다.
this.AcceptButton = this.button2;// Enter button2
둘째,창문 떨 림1.창문 떨 림 의 원리
실질 적 으로 창문 위치의 변화 와 빠 른 이동 이다.
첫 번 째 단계:
모니터 에 창 을 가운데 로 놓 고 창의 텍스트 를 설정 합 니 다.
this.CenterToScreen();//
this.Text = " ";
두 번 째 단계:단 추 를 삽입 하고 단추 의 크기 와 텍스트 내용 을 설정 합 니 다.
this.button1.Size = new Size(80, 40);
button1.Text = " ";
세 번 째 단계:창의 위 치 를 설정 하 는 것 입 니 다.그러면 그 위치의 변 화 는 창 이 가운데 에 있 는 위치 왼쪽 상단 의 위치 부터 시계 방향 으로 이동 하 는 것 입 니 다.
그렇다면 그것 이 바 꾸 는 규칙 은 무엇 입 니까?
먼저 초 반 의 위치 에서(바로 극 중 왼쪽 상단 의 위치 가 오른쪽으로 이동 하 는 것 이다='다시 아래로='왼쪽으로='왼쪽으로='위로='위로='오른쪽으로='오른쪽으로='아래로='왼쪽으로='왼쪽으로.마지막 으로 초기 위치 로 돌아 가기
location 속성 을 사용 해 야 합 니 다.
하지만 이동 할 때마다 몇 밀리초 간 머 물 게 해 야 하기 때문에 스 레 드 라 는 개념 을 사용 해 야 한다.
그럼 스 레 드 가 뭐 예요?
Thread 스 레 드 는 운영 체제 가 연산 스케줄 을 할 수 있 는 가장 작은 단위 로 프로 세 스 에 포함 되 어 있 으 며 스케줄 의 실제 운영 단위 입 니 다.
Thread.Sleep(); 현재 스 레 드 가 지정 한 밀리초 수 를 걸 었 음 을 표시 합 니 다.
Thread.Sleep(20);// 20
그러나 위 치 를 한 바퀴 바 꾼 후 초기 위치 로 돌아 가 는 것 은 떨 림 이 아니 므 로 for 순환 을 사용 하여 여러 번 이동 시 켜 떨 림 효 과 를 실현 해 야 합 니 다.원본 코드 는 다음 과 같 습 니 다.
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);
}
}
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.