用c#做聊天软件

做一个即时聊天软件
需要:本地服务器 mssqlserver ,工具:visual studio 2017

A,注册,2种方式,1,用多个groupbox把密码放在最后填写,2,直接填写密码,给出账号,资料后续自己填写。
Point1:picturebox 图片框点击时,弹出一个模态窗口,选完图片后关闭,然后窗口
有listview 大图标,imagelist,imagelist绑定listview。
1,窗体加载时显示所有图片。先在imagelist添加大小相似的图片,50X50px
for (int i = 0; i<= imagelist1.Images.Count;i++)
{
//把图片添加到listview
ListViewItem lvi = new ListViewItem();
//下标
lvi.ImageIndex = i;
listview1.Items.Add(lvi);
}

2,listview的双击事件,传下标值与图片
Program.Index = listview1.SelectedItems[0].ImageIndex;
Program.img = imagelist.Images [listview1.SelectedItems[0].ImageIndex];
注册完之后,返回一个账号,即插入的一个账号。

B,登录,验证账号与密码,但为了流量攻击,可以账号与密码一起验证。可用磁盘写入来记住密码,最近登录,最近的几个账号等等。

C,主界面 用到第三方控件,chatlistbox 就是根据我的账号在朋友表和用户表中查出我的好友的信息。并把我的信息展示在主界面。
代码 :
//创建一个分组
ChatListItem item1 = new ChatListItem(“我的好友”);
//把分组添加到控件中
clb_friend.Items.Add(item1);
//ado.net 的datatable dt连接数据库代码。
**********关键点,chatlistbox里字段的使用,赋值
foreach(DataRow r in dt.Rows)
{
ChatListSubItem sb = new ChatListSubItem();
sb.DisplayName = r[].ToString();//昵称
sb.HeadImage = …//头像
sb.ID = …//id …
item.SubItems.Add(sb);
}

还有一个,控件的双击子项
clb.DoubleClickSubItem += clb_DoubleClickSubItem;
生成一个方法,
private void CLB_DoubleClickSubItem(object sender, ChatListEventArgs e)
{
//双体得到好友id,然后id传值到聊天窗口。
string TAID = (sender as ChatListBox).SelectSubItem.ID.ToString();
Frm_Chating fc = new Frm_Chating();
fc.TID = TAID;
fc.Show();

}
…对于我的信息,可以查出来,像签名这些用到字符串的截取操作…
为了鼠标悬浮在控件上有提示,用了tooltip ttp

D,聊天,即时聊天,当然聊天这个功能最重要了。
原理,主界面timer一直查发给我的消息。用datatabel
给出提示,对应头像闪烁,或发出声音。

双击chatlistbox的项时有聊天窗口弹出。这个属于主界面。

学习的点,SoundPlayer sp = new SoundPlayer(“声音文件”);
sp.Play(); sp.Stop();
FromUserID = 好友id
闪烁,clb.GetSubItemsById(好友id)[0].IsTwinkle = true;

聊天窗口,点击发送,在消息表中插入数据。
用到timer,收到给我的消息,先把消息改为已读,再把我的消息展示在文本框。

E,好友的添加与删除。
先查找到好友。多条件组合模糊查询。
1(同意)2(要允许)3(拒绝)是哪种验证方式,查出来,给去相应提示。在加之前判断是否加的是自己,是已经是好友。
是,给出相应提示。已经是好友就在friends表里写两条sql语句,返回值都为1则是好友。
是要验证的情况,直接在消息表中插入系统消息。在用户上线时判断用户是否同意,同意,则插入两条数据在消息表。

主界面一直查消息,系统消息。
1,修改为已读,得到消息,关键字内容,字符串Contains判断。朋友表插入数据。

最后总结,主要增删改查,对sql代码的敏感,次要第三方控件的运用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言安装;Rstudio安装

R安装 1&#xff0c;先安装一个源 yum install epel-release2&#xff0c;安装Ryum install R 搞定&#xff01;Rstudio安装 1&#xff0c;下载相应的安装包 https://www.rstudio.com/products/rstudio/download/ 2&#xff0c;rpm -ivh **.rpm 3&#xff0c;在usr/bin …

cocos2dx 背景用小尺寸图片滚动填充的方法

直接上代码 在初始化方法中添加图片&#xff1a; bool BackGroundLayer::init() {frameCacheCCSpriteFrameCache::sharedSpriteFrameCache();CCSize visibleSize CCDirector::sharedDirector()->getVisibleSize();bgCell1CCSprite::createWithSpriteFrame(frameCache->s…

高级数据库,建库,建表,建约束

use master --建库&#xff0c;dbtime&#xff0c;名称time create database dbtime on primary (name Time.mdf,fileName E:\Time.mdf,size 4mb,maxsize 20mb,filegrowth 2mb ) log on (name Time_log.ldf,filename E:\Time_log.ldf,size 4mb,maxsize 20mb,filegrowth…

1054. 求平均值 (20)

本题的基本要求非常简单&#xff1a;给定N个实数&#xff0c;计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是[-1000&#xff0c;1000]区间内的实数&#xff0c;并且最多精确到小数点后2位。当你计算平均值的时候&#xff0c;不能把那些非法的数据…

最大子段和c(c语言实现)

1&#xff0c;题目 2&#xff0c;各种算法 暴力解决&#xff0c;就是所有的情况都遍历一遍&#xff0c;然后说&#xff0c;我找到最牛逼的啦 int MaxSubseqSum1(int A[], int N, int* pidxStart, int* pidxEnd) { int sum A[0], tempSum 0;int i, j, k;*pidxStart 0, *pid…

sql语法,未完待续

MS SQLSEVER 是结构化查询语言&#xff0c;标准化查询语言&#xff0c;面向自然语言&#xff0c;编程语言。 做为编程语言&#xff0c;对编程却没卵用&#xff0c;是辅助查询用的。它没类库。 做为编程语言肯定有语法。 变量 declare i int set i 1 print i–消息 select i --…

2021-07-14

pat甲级1097 我还用数组下标从1到n的方式遍历链表&#xff0c;真菜。 csdn上有的博客的题解对输入排序了&#xff0c;有的没排序。我还是通过参考别人的代码过了。 下面代码的思路是一个数组&#xff0c;通过节点的标记值来分离留下的和删除的&#xff0c;我的想法是两个数组分…

1007. Maximum Subsequence Sum (25)

Sample Input: 10 -10 1 2 3 4 -5 -23 3 7 -21 Sample Output: 10 1 4 错误代码如下&#xff1a; #include <stdio.h>int MaxSubseqSum4(int A[], int N, int* pstart, int* pend) {int i 0;int tempStart; //记录最大子段和位置int thisSum 0, sum 0;tempStart …

关于 ASP.NET MVC 中的视图生成

在 ASP.NET MVC 中&#xff0c;我们将前端的呈现划分为三个独立的部分来实现&#xff0c;Controller 用来控制用户的操作&#xff0c;View 用来控制呈现的内容&#xff0c;Model 用来表示处理的数据。 从控制器到视图 通常&#xff0c;在 Controller 中&#xff0c;我们定义多个…

2021-07-21

leetcode113 看了很多别人的题解&#xff0c;还是感觉没太懂&#xff0c;主要是因为dfs和bfs没彻底会用&#xff0c;还是得找专门的题练练。 得早睡早起呀&#xff0c;假期学习真就靠自律呀。 *** Definition for a binary tree node.* struct TreeNode {* int val;* …

实验项目 3-4:一元多项式的乘法与加法运算

代码如下&#xff1a; /*************************************************************************> File Name: AddPoly.c> Author: YueBo> Mail: yuebowhu163.com> Created Time: 2016年12月17日 星期六 13时00分35秒***************************************…

SQL自定义完整性

自定义完整性。&#xff08;事务&#xff09; 事务的四个特性&#xff1a; 原子性 : 事务中SQL语句是一个整体, 不可分离,要么都执行、要么都不执行 一致性 : 事务前后数据保持一致 隔离性 : 事务中不允许其他事务介入 永久性 : 事务执行之后对数据表的修改是永久的 Expectatio…

伪类和伪元素

选择第一个子元素&#xff1a;first-child li:first-child{text-decoration: underline;}li:last-child{color: red;}p:first-child{font-style: italic;} <p>xiaoren</p><ul><li>Insert Key</li><li>Turn Key<strong>clockwise<…

T-SQL存储过程

存储过程。即T-SQL里的方法。类似封装的思想。 基本语法如下&#xff1a; create proc 方法名 name 默认值可不写&#xff0c;传入的参数 数据类型 , p变量名 数据类型 output (返回值) asSql代码 go--调用上面方法 declare variable 和p一样的类型 exec 方法名 传值 , var…

Extjs4开发中的一些问题

1. 子frame刷新的问题 一般在jsp里面&#xff0c;要实现界面跳转&#xff0c;有很多方法&#xff0c;最典型的就是window.location.href"href",但是在嵌套有iframe框架的页面布局&#xff0c;使用上述语句&#xff0c;只会使iframe本身实现跳转&#xff0c;如果遇到…

TSQL索引与视图

创建视图 简化sql 代码&#xff0c;还有&#xff0c;给予权限&#xff08;只能查指定的列&#xff09; create view 视图名 as sql代码&#xff0c;不要有同名列&#xff08;只能一句sql代码&#xff09; go select * from 视图名 &#xff08;最好不要用视图做更改操作&#…

jacob 实现Office Word文件格式转换

关于jacob用法&#xff0c;百度一下就会发现几乎都是复制2004年一个代码&#xff0c;那段代码实现的是从一个目录读取所有doc文件&#xff0c;然后把它转html格式。 为了便习学习和使用&#xff0c;我把代码看懂后精简了一下&#xff0c;得出不少新结论&#xff0c;拿出来和大家…