实训报告书
课题名称:C#语言和数据库应用实训
系(部):
专业班级: 学生姓名: 学号:
完成日期: 2016年7月21日
摘要
摘要
随着网络的逐渐普及,以及网络技术的不段发展,人们通过网络进行交流的方式变得多样化。网络聊天室便是其中之一。聊天室系统的即时交流方式满足了网络中多人同时聊天交流的需要,使得较多的人在同一个聊天室进行交流变得方便,简单。
随着互联网技术的飞速发展,基于网络的即时通信技术也给人们带来了诸多便利,人们也慢慢体会到了网上聊天的乐趣与无拘束的感觉。聊天工具作为当今使用最为广泛的即时通信工具之一,可以方便的同网络上的好友在线交流。在中国,最流行的莫过于腾讯公司的QQ和微信,伴随着技术的不断升级,腾讯公司也为我们带来了越来越多的精彩的服务。这里我将利用Socket编程技术模拟QQ聊天功能,实现一个简单的即时聊天室。
关键词:聊天室、C#、数据库
I
目录
目录
摘要 .................................................................................................................................................... I 1
项目总体思路 ............................................................................................................................ 1 1.1
设计思路 ................................................................................................................................. 1
1.1.1 1.1.2 1.1.3 1.1.4 2
基本功能 ......................................................................................................................... 1 服务器设计思路 ............................................................................................................. 1 客户端设计思路 ............................................................................................................. 3 系统说明 ......................................................................................................................... 3
项目设计与实现 ........................................................................................................................ 4 2.1
前台界面设计 ......................................................................................................................... 4
服务器界面设计 ............................................................................................................. 4
2.1.2 登录和注册界设计 ......................................................................................................... 4 2.1.3 聊天室界面设计 ............................................................................................................. 5 2.2 前台和数据库连接技术方法.................................................................................................. 5 2.2.1 代码的实现 ..................................................................................................................... 5 2.3 数据库的设计 ......................................................................................................................... 6 2.3.1 数据库设计步骤 ............................................................................................................. 6 2.3.2 表的设计 ......................................................................................................................... 7
3
实训总结 ................................................................................................................................... 9
2.1.1
参考文献 ......................................................................................................................................... 10 附录 .................................................................................................................................................... 11 附录A 主要源程序 ........................................................................................................................... 11
II
项目总体思路
1 项目总体思路
1.1 设计思路
1.1.1 基本功能
注册、登录、根据手机号搜素并添加好友、好友列表显示添加好友、允许添加好友、私聊信息可以保存在数据库中、可以显示与好友的聊天信息、可以创建群、根据群名搜素群并加入群、可以群聊、保存和获取群聊信息、退出关闭等。功能图如图1.1所示
即时聊天室 用户注册 用户登录 好友列表(私聊 群列表 查找好友 添加好友 删除好友 查找群 加入群 创建群 解散群 群聊
图1. 1即时聊天室功能
1.1.2 服务器设计思路
1) 设置端口号、命令长度、登录命令、私聊命令、群聊命令、添加好友请求命令等。
2) 初始化Socket,创建服务器端。进行实例化侦听,启动侦听,服务器启动。
3) 获得客户端的Socket,实例化连接的用户。获取本机IP地址、端口信息,将该登录用户信息发送给所有用户。
4) 利用回调函数接收用户传来的聊天信息,包括添加好友、群聊信息、私
1
山东科技大学
5) 聊信息等,然后将信息发送给所有用户。
6) 接收用户传来的连接判断命令,并向用户发出响应命令。
服务器端采用异步模式,服务器在提供网络服务前先初始化,启动服务等待网络事件的发生,在异步模式下是可以设定对哪些网络事件进行响应的,对于其它网络事件可以不响应。当先前设定了的网络事件发生时,服务器会自动进行接收,对于不同的网络事件,采取不同的消息处理方法,消息处理完毕后,服务器重新处理闲置状态,直到新的网络事件发生。服务器端异步模式流程图,如图1.2所示。
服务器端启动服务器服务器闲置网络事件触发接收消息消息分类处理消息处理结束
图1. 2服务器端异步模式流程
服务器端多线程原理图如图1.3所示
主线程的Socket请求客户端的Socket侦听继续侦听建立连接发送连接信号通信新建线程信息处理结束释放资源结束释放资源 2
项目总体思路
图1. 3服务器多线程处理流程
1.1.3 客户端设计思路
1) 设置端口号、命令长度、登录命令、私聊命令、群聊命令、添加好友请求命令等。
2) 支持多个客户端的连接,在服务器和多个客户端之间进行数据传输。 3) 接收客户端发送的消息,并显示在一个ListBox内。
4) 将注册(通过正则验证)的用户保存在数据库中,已经注册的用户可以登录。
5) 登录以后可以进入到聊天室界面,在界面内可以查询、添加好友,查询、创建、加入群组,私聊,群聊等,并将相关数据保存到数据库中,必要时获取相关信息。
1.1.4 系统说明
客户端和服务器都处在一个局域网中,在网内都有唯一的IP地址。此结构如同五台电脑组成,其中一台为服务器,各个客户端处在平等地位,服务器处在核心地位,为每个客户端进行消息中转,结构图如1.4所示。其中虚线表示客户端间的通信,它是虚的通信路径,实际的通信路径是通过服务器中转的。实线表示客户端和服务器间的通信。
Client AClient DServerClient BClient C 图1. 4系统结构图
3
山东科技大学
2 项目设计与实现
2.1 前台界面设计
2.1.1 服务器界面设计
图2.1是服务器Sever的界面设计,用了一个Label标签提示服务器是否启动以及启动服务器以后获取的本机的IP地址,还用了两个Button按钮分别用来启动服务器和关闭服务器。图2.2是启动服务器以后的界面。
图2. 1服务器界面设计图2. 2启动后的服务器
2.1.2 登录和注册界设计
图2.3登录界面和图2.4注册界面是用TabControl(选项卡)这个控件制作成,选项页内分别放了六个Label标签(其中三个做正则验证信息提示用的,只有鼠标悬停在TextBox文本框上和离开文本框时,提示信息才出现)、三个TextBox文本框用来填写基本信息、两个Botton按钮分别执行相关功能。
图2. 3登录界面图2. 4注册界面
4
项目设计与实现
2.1.3 聊天室界面设计
图2.5是聊天室的整理界面样式,分别使用了ListBox、Label、Botton、TabControl、TextBox等控件设置出来[1],分别设置其属性值及其触发事件来控制操作整个界面。
图2. 5聊天窗体
2.2 前台和数据库连接技术方法
2.2.1 代码的实现
定义一个
DataHelper
类,里面有连接数据库语句
\"server=(local);database=IMDB;integrated security=SSPI\",和目标数据库连接以后,就可以进行查询、插入、删除、更改数据库里的数据,在进行查询、插入、删除、更改数据库之前要打开数据库连接,然后在执行相关操作,执行完相关操作以后,打开连接池(最晚打开,及早关闭)。具体代码如下所示[2]。
public class DataHelper
{
//连接数据库字符串
string connStr = @\"server=(local);database=IMDB;integrated security=SSPI\"; //查询方法
public SqlDataReader GetReader(string sql,SqlParameter[] pars) {
//打开数据库连接
SqlConnection conn = new SqlConnection(connStr); //执行SQL语句或存储过程的命令
SqlCommand cmd = new SqlCommand(sql, conn); if(pars !=null)
5
山东科技大学
{
//向命令参数中添加参数数组 cmd.Parameters.AddRange(pars); }
//打开连接池(最晚打开,及早关闭) conn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); return dr; }
//插删改操作
public bool ExeCommand(string sql, SqlParameter[] pars) {
//打开数据库连接
SqlConnection conn = new SqlConnection(connStr); //执行SQL语句或存储过程的命令
SqlCommand cmd = new SqlCommand(sql, conn); if (pars != null) {
//向命令参数中添加参数数组 cmd.Parameters.AddRange(pars); }
//打开连接池(最晚打开,及早关闭) conn.Open();
int count = cmd.ExecuteNonQuery (); conn.Close();
return count > 0 ? true : false; }
}
2.3 数据库的设计
2.3.1 数据库设计步骤
数据库设计可以分为概念结构设计、逻辑结构设计和物理结构设计三个阶段
[3]
。
(1)概念结构设计。这是数据库设计的第一个阶段,在管理信息系统的分
析阶段,已经得到了系统的数据流程图和数据字典,现在要结合数据规范化的理论,用一种数据模型将用户的数据需求明确地表示出来。
概念数据模型是面向问题的模型,反映了用户的现实工作环境,是与数据库
6
项目设计与实现
的具体实现技术无关的。建立系统概念数据模型的过程叫做概念结构设计。
(2)逻辑结构设计。根据已经建立的概念数据模型,以及所采用的某个数据库管理系统软件的数据模型特性,按照一定的转换规则,把概念模型转换为这个数据库管理系统所能够接受的逻辑数据模型。不同的数据库管理系统提供了不同的逻辑数据模型,如层次模型、网状模型、关系模型等。
(3)物理结构设计。为一个确定的逻辑数据模型选择一个最适合应用要求的物理结构的过程,就叫做数据库的物理结构设计。数据库在物理设备上的存储结构和存取方法称为数据库的物理数据模型。
2.3.2 表的设计
Users表设计:用户表编号Id设为主键,用户名UserName,密码PassWord,手机号Phone不为空且不可重复,如表2.1所示[4]。
表2. 1 Users表的设计
列名 Id(主键) UserName PassWord Phone 数据类型 int navachar(50) navachar(50) navachar(20) 允许Null值 否 是 是 否 AddFriend表设计:加好友列表编号Id设为主键,请求者Send设为外键(参照Users表中的Id),被请求者Receive设为外键(参照Users表中的Id),时间SendTime,状态State(0代表发送请求,1代表同意加好友,-1代表拒绝加好友,2代表加入黑名单),如表2.2所示。
表2. 2 AddFriend表的设计
列名
Id(主键) Send(外键) Receive(外键) State
SendTime
数据类型 int int int int
datetime
允许Null值 否 是 是 是 是
ToPerson表设计:私人消息表编号Id,消息发送者Send设为外键(参照Users表中的Id),消息接收者Receive设为外键(参照Users表中的Id),消息内容
7
山东科技大学
Contents,发送时间SendTime,状态State(1发送、2撤回),如表2.3所示。
表2. 3 ToPerson表的设计
列名
Id(主键) Send(外键) Receive(外键) Contents State
SendTime
数据类型 int int int
nvarchar(400) int
datetime
允许Null值 否 是 是 是 是 是
Groups表设计:群列表编号Id设为主键,群名称GroupName,状态State(1代表群正常2代表解散群),如表2.4所示。
表2. 4 Groups表的设计
列名 Id(主键) GroupName State
数据类型 int
nvarchar(50) int
允许Null值 否 是 是
JoinGroup表设计:群成员表编号Id,群成员GroupUser设为外键(参照Users表中的编号Id),群号GroupId(参照群列表中的编号Id),状态State(1代表在群中2代表离开群),加群时间JoinTime,如表2.5所示。
表2. 5 JoinGroup表的设计
列名
Id(主键)
GroupUser(外键) GroupId(外键) JoinTime State
表2. 6 ToGroup表的设计
列名
Id(主键)
GroupId(外键) Send(外键) SendTime Contents
数据类型 int int int
datetime
nvarchar(400)
允许Null值 否 是 是 是 是
数据类型 int int int datetime int
允许Null值 否 是 是 是 是
ToGroup表设计:群消息表编号Id设为主键,群号GroupId设为外键(参照
8
实训总结
群列表中的编号Id),发送人Send设为外键(参照群成员表中的GroupUser),时间SendTime,内容Contents,如表2.6所示。
3 实训总结
本次实训实现了即时聊天系统的基本功能,虽然没有华丽的界面,超强的性能,就练手学习而言绰绰有余。
通过即时聊天室的设计,感觉动手能力增强了很多,C#编程能力有了比较大的提升。设计本系统,是对自己专业知识的一次检验,也是一次增强自身综合素质机会。C#程序设计这门课程将我们从局部的编写程序带入了整体开发软件的阶段,这是对我们知识与能力的一种挑战。还有本次实训和以往不同,本次实训还结合了数据库的应用,很大层次上对学生的动手实践能力提高了。通过C#和数据库的结合来实现即时聊天室这个系统,我们既可以操作前台又可以对后台进行操作,在聊天室里的所有操作,在数据库里都可以看到。
通过本次实训也发现了自己的很多问题,比如说,对C#和数据库的基础知识掌握不牢固,有时候用到的时候还要去翻翻书。每次的粗心马虎是必不可少,实训中有些地方就是因为粗心马虎,程序出错而且很难找到错点。
通过本次实训,学到了平时课堂上没有学到的东西,翻阅了很多资料,了解了不少以前没接触的东西。遇到不懂不会的问题借助资料书,互联网尽可能的将其解决。问题是死的人是活的,“众人拾柴火焰高”,通过小组成员对难题的讨论,将难题容易化,从每个小组成员那都可以学到不同的东西,三人行必有我师!
如果想提高自己的综合能力,必须多动手,多思考,多翻阅资料,多请教老师和同学,只有这样不断地磨炼才能有所成绩!!
9
山东科技大学
参考文献
[1]郑宇军.C#程序设计(第2版)[M].北京:人民邮电出版社,2016
[2]王小科,张金辉,杨贵发.C#程序开发范例宝典[M].北京:人民邮电出版社,2015 [3]唐汉明,翟振兴,关宝军,王洪权,黄潇.深入浅出MySQL数据库开发、优化与管理维护(第2版)[M].北京:人民邮电出版社,2016
[4]王珊,萨师煊.数据库系统概论(第5版)[M].北京:高等教育出版社,2015
10
附录
附录
附录A 主要源程序
ChatForm窗体代码: using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
using System.Threading.Tasks; using System.Windows.Forms; using System.Net;
using System.Net.Sockets; using Model;
using DataService;
namespace Client {
public partial class ChatForm : Form {
D_ToPerson D_ToPerson = new D_ToPerson(); //端口号
const int PORT = 20001; //命令长度
const int COMMANDLENGTH = 9; //登录命令
const string LOGINCOMMAND = \"LOGIN \"; //私聊命令
const string TOPENSON = \"TOPENSON \"; //群聊命令
const string TOGROUP = \"TOGROUP \"; //添加好友命令
const string ADDFRIEND = \"ADDFRIEND\"; //byte数组长度
const int SIZE = 8192; //字节数组,缓冲区
byte[] buffer = new byte[SIZE]; //声明客户端socket
Socket clientSocket = null; //用于保存所有用户
11
山东科技大学
List M_User MySelf = new M_User(); M_User Receivephone = new M_User(); //用户名长度 const string USERLENGTH = \"XX\"; //定义一个数据更新的委托 public delegate void UpdateData(string data); public ChatForm() { InitializeComponent(); } private void ChatForm_Load(object sender, EventArgs e) { //实例化登陆窗口 Form1 frm = new Form1(); //登录窗口以模式对话框形式显示 frm.ShowDialog(); //判断对话框是否点击 if (frm.DialogResult != DialogResult.OK) { this.Close(); } else { M_User user = frm.user; Lbl_UserName.Text = user.UserName; //实例化Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(frm.TxtIP); EndPoint serverEp = new IPEndPoint(ip, PORT); clientSocket.Connect(serverEp); //接收消息(异步接收) clientSocket.BeginReceive(buffer, 0, SIZE, SocketFlags.None, OnDataReceive, null); MySelf.Phone = frm.TxtPhone; //连接数据库获得其他信息 SendMessage(LOGINCOMMAND + frm.TxtPhone); } } public void AddMessage(string message) 12 附录 { string command = message.Substring(0, COMMANDLENGTH); if (command == LOGINCOMMAND) { string phone = message.Substring(COMMANDLENGTH); string[] phoneArr = phone.Split(','); //清空用户列表 allClients.Clear(); //显示好友列表 List foreach (M_Friend M_P in ll) { Lb_UserList.Items.Add(M_P.Receive.Phone); } //显示群列表 List foreach (M_Group M_G in l) { Lb_groupList.Items.Add(M_G.GroupName); } } //私聊 else if (command == TOPENSON) { string len = message.Substring(COMMANDLENGTH, USERLENGTH.Length); //手机号长度 int result = 0; result = int.TryParse(len, out result) ? result : Convert.ToInt32(len.Substring(0, 1)); //发送者手机号 string phone = message.Substring(COMMANDLENGTH + USERLENGTH.Length, result); //刷新聊天列表 List Lb_Message.Items.Clear(); //添加聊天信息 foreach (M_ToPerson M_P in l) 13 山东科技大学 { Lb_Message.Items.Add(M_P.Send.UserName + \" \" + M_P.SendTime); Lb_Message.Items.Add(M_P.Contents); } } //群聊 else if (command == TOGROUP) { } //添加好友 else if (command == ADDFRIEND) { string state = message.Substring(COMMANDLENGTH, 2).Trim(); string userPhones = message.Substring(COMMANDLENGTH + 2); string[] arrUser = userPhones.Split(','); string sUserPhone = arrUser[0]; string rUserPhone = arrUser[1]; //请求添加 if (state == \"0\") { if (MessageBox.Show(string.Format(\"【{0}】请求添加你为好友,是否接受?\好友申请\ DialogResult.Yes) { //接受 bool b = D_ToPerson.ChangeFriendState(sUserPhone, rUserPhone, 1); D_User dUser = new D_User(); M_User newUser = dUser.GetUserByPhone(sUserPhone); allClients.Add(newUser); //刷新用户列表 RFUserList(); //添加好友命令+好友状态+请求人电话,接收人电话 string sendMessage = ADDFRIEND + \"1 \" + MySelf.Phone + \sUserPhone; //发送消息 SendMessage(sendMessage); } else { //拒接添加 bool b = D_ToPerson.ChangeFriendState(sUserPhone, rUserPhone, -1); 14 附录 //添加好友命令+好友状态+请求人电话,接收人电话 string sendMessage = ADDFRIEND + \"-1\" + MySelf.Phone + \sUserPhone; //发送消息 SendMessage(sendMessage); } } //回复请求 else if (state == \"1\" || state == \"-1\") { if (state == \"1\") { D_User dUser = new D_User(); M_User newUser = dUser.GetUserByPhone(sUserPhone); allClients.Add(newUser); //刷新用户列表 RFUserList(); MessageBox.Show(string.Format(\"【{0}】接受你了添加好友申请。\ } else { MessageBox.Show(string.Format(\"【{0}】拒接你了添加好友申请。\ } } } } //回调函数 public void OnDataReceive(IAsyncResult ia) { int count = clientSocket.EndReceive(ia); //解码 string message = Encoding.UTF8.GetString(buffer, 0, count); //执行委托 this.Invoke(new UpdateData(AddMessage), message); buffer = new byte[SIZE]; //接收消息(异步接收) clientSocket.BeginReceive(buffer, 0, SIZE, SocketFlags.None, OnDataReceive, null); } //刷新用户列表 public void RFUserList() 15 山东科技大学 { //清空用户列表 Lb_UserList.Items.Clear(); //遍历添加新用户 foreach (M_User user in allClients) { Lb_UserList.Items.Add(user.Phone); } } //聊天对象 string ChatUser = \"\"; int state = -1;//0为私聊。1群聊,-1没有聊天对象 //双击好友聊天 private void Lb_UserList_MouseDoubleClick(object sender, MouseEventArgs e) { state = 0; D_User getName = new D_User(); M_User GetName = getName.GetUserByPhone(ChatUser); Lbl_User.Text = \"您正在与:\" + GetName.UserName + \" \" + \"进行对话\"; //刷新聊天列表 List Lb_Message.Items.Clear(); //添加聊天信息 foreach (M_ToPerson M_P in l) { Lb_Message.Items.Add(M_P.Send.UserName + \" \" + M_P.SendTime); Lb_Message.Items.Add(M_P.Contents); } } private void Btn_Send_Click(object sender, EventArgs e) { string message = \"\"; if (ChatUser != \"\") { if (Txt_Message.Text != \"\") { //私聊 if (state == 0) { string len = \"\"; if (ChatUser.Length > 9) { len = ChatUser.Length.ToString(); 16 附录 } else { //个位数的情况补齐两位 len = ChatUser.Length.ToString() + \"X\"; } //私聊命令+用户名或手机号长度(用于截取字符串)+聊天对象+发送的消息 message = TOPENSON + len + ChatUser + Txt_Message.Text; DateTime now = DateTime.Now; //将聊天消息保存到数据库 bool b = D_ToPerson.SaveInfo(MySelf.Phone, ChatUser, Txt_Message.Text); if (b) { //发送消息 SendMessage(message); //刷新聊天列表 List //清空聊天列表 Lb_Message.Items.Clear(); //添加聊天信息 foreach (M_ToPerson M_P in l) { Lb_Message.Items.Add(M_P.Send.UserName + \" \" + M_P.SendTime); Lb_Message.Items.Add(M_P.Contents); } Txt_Message.Text = \"\"; } } //群聊 else if (state == 1){ } } else { MessageBox.Show(\"输入消息不能为空!\"); } } else { 17 山东科技大学 Lb_Message.Text = \"聊天用户不能为空!\"; } } //给服务器发消息 public void SendMessage(string msg) { byte[] buf = Encoding.UTF8.GetBytes(msg); clientSocket.Send(buf); } //取消发送 private void Btn_Clear_Click(object sender, EventArgs e) { Txt_Message.Clear(); } //显示用户名 private void Lb_UserList_SelectedIndexChanged(object sender, EventArgs e) { D_User getName = new D_User(); ChatUser = Lb_UserList.SelectedItem.ToString(); M_User GetName = getName.GetUserByPhone(ChatUser); Lbl_FriendName.Text = GetName.UserName; } //从数据库中查询好友 private void Btn_ReferFriend_Click(object sender, EventArgs e) { D_User referphone = new D_User(); M_User Referphone = referphone.GetUserByPhone(Txt_ReferPhone.Text); if (Referphone!=null) { Lb_ReferPhone.Items.Add(Referphone.Phone); MessageBox.Show(\"查询成功!\"); } else { MessageBox.Show(\"您所查找的用户不存在!\"); } } //添加好友并保存到数据库 private void Btn_AddFriend_Click(object sender, EventArgs e) { Receivephone.Phone = Lb_ReferPhone.SelectedItem.ToString(); if (MySelf.Phone == Receivephone.Phone) { 18 附录 MessageBox.Show(\"自己不能添加自己为好友!\"); return; } //获取好友状态 0代表发送请求,1代表同意加好友,-1代表拒绝加好友,2代表加入黑名单,null 代表未申请添加过 int? state = D_ToPerson.GetFriendState(MySelf.Phone, Receivephone.Phone); bool isContinue = false; //是否继续申请 if (state == 1) { MessageBox.Show(string.Format(\"与【{0}】已是好友关系!\Receivephone.Phone)); return; } else if (state == 0) { isContinue = MessageBox.Show(\"已发送过请求,对方还未回复是否继续发送\提示\ } else if (state == 2) { MessageBox.Show(\"已被设为黑名单,无法提交申请!\"); return; } else if (!state.HasValue) { isContinue = true; } if (isContinue) { bool b = true; if (!state.HasValue) { b = D_ToPerson.SaveFriend(MySelf.Phone, Receivephone.Phone); } if (b) { //添加好友命令+好友状态+请求人电话,接收人电话 string message = ADDFRIEND + \"0 \" + MySelf.Phone + \+ Receivephone.Phone; //发送消息 SendMessage(message); } Lb_ReferPhone.ClearSelected(); 19 山东科技大学 } } //删除好友 private void Btn_DelFriend_Click(object sender, EventArgs e) { string ReferFriend = \"\"; ReferFriend = Lb_UserList.SelectedItem.ToString(); Lb_UserList.Items.Remove(ReferFriend); } //建立群 D_User D_U = new D_User(); M_Group GroupName = new M_Group(); D_User referGroupName = new D_User(); private void Btn_BuildGroup_Click(object sender, EventArgs e) { M_Group ReferGroupName referGroupName.GetGroupName(Txt_GroupName.Text); if (ReferGroupName!=null) { bool b = referGroupName.BuildGroup(Txt_GroupName.Text); MessageBox.Show(\"建群成功!!\"); } else { MessageBox.Show(\"该群已存在!!\"); } } //从数据库中查询群名称 private void Btn_ReferGroup_Click(object sender, EventArgs e) { D_User referGroupName = new D_User(); M_Group ReferGroupName referGroupName.GetGroupName(Txt_GroupName.Text); if (ReferGroupName != null) { Lb_ReferGroupName.Items.Add(ReferGroupName.GroupName); MessageBox.Show(\"查询成功!\"); } else { MessageBox.Show(\"您所查找的群不存在!\"); } } private void Btn_Close_Click(object sender, EventArgs e) 20 = = 附录 { Application.Exit(); } //加入该群 private void Btn_AddGroup_Click(object sender, EventArgs e) { M_Group groupname = new M_Group(); groupname.GroupName= Lb_ReferGroupName.SelectedItem.ToString(); } } } 21
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务