Tcp的应用客户端重要笔记 1.Random类(随机类)的使用方法: 例如:Random r = new Random(); textBoxUserName.Text = "user" + r.Next(100, 999); //这里r.Next(100,999)是指返回一个随机的非负整数,区间在100到999之间, //这里r.Next(100,999)返回的是一个整数int类型,在与字符串类型的user相结合后会自动变成字符 串类型进行相加 此外还有: Random.Next()函数有三个重载: Random.Next():返回一个随机的非负整数 Random.Next(int maxValue):返回一个随机且小于maxValue的非负整数 Random.Next(int minValue,int maxValue):返回一个随机且属于区间(minValue,MaxValue)中的非负整数 除此以外,Random还有 Random.NextBytes(byte[] buffer):将指定的byte数组中的元素用随机数填充 Random.NextDouble():返回一个属于(0.0,1.0)区间的双精度类型

 

 

2.listBox对象当中的HorizontalScrollbar 属性的含义: HorizontalScrollbar屬性可決定當 ListBox 中的項目寬度超出控制項右邊緣時,ListBox 是否應該顯示水平捲軸。如果這個屬性設為 true,捲軸將自動依照 ListBox 中的項目寬

 

 

3.Thread对象中IsBackground属性的含义及其用法: (1)当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为false的 (2)当主线程退出的时候,IsBackground=false的线程还会继续执行下去,知道线程执行结束 (3)只用IsBackground=true的线程才会随着主线程的退出而退出 (4)当初始化一个线程,把Thread.IsBackground=ture的时候,只是该线程为后台线程,后台线程将会随着主线程的退出而退出

 

 

4.Thread声明对象的时候出现ThreadStart类 例如:Thread threadReceive = new Thread(new ThreadStart(ReceiveData)); 但我们也常常看见如下的声明方法: 例如:Thread threadReceive=new Thread(ReceiveData); //注意这里的ReceiveData是一个函数 //它们两个没什么区别,只是new ThreadStart(ReceiveData)显式声明一个委托,ReceiveData这个指向函数的地址就是委托,注意ReceiveData没有小括号

 

 

5.在ListBox对象当中的SelectedIndex属性,表明ListBox的焦点值是第几位,若没有选择焦点,则其值为-1,与其焦点对应的文本字符串的值用 SelectedItem来调用 例如:if (listBoxOnlineStatus.SelectedIndex != -1) { //SendMessage("Talk," + listBoxOnlineStatus.SelectedItem + "," + textBoxSend.Text+"\r\n"); SendMessage("Talk," + listBoxOnlineStatus.SelectedItem + "," + textBoxSend.Text); textBoxSend.Clear(); } else { MessageBox.Show("请?先è在ú[当獭?前°在ú线?]中D选?择?一?个?对?话°者?"); } 6.关闭窗体所触发的事件FormClosing

 

 

7.当一个用户推出时,需要把BinaryReader,TcpClient,BinaryWriter三个类的对象调用Close()方法进行关闭 例如:br.Close(); bw.Close(); client.Close();

 

 

8.在TextBox文本框当中按下【Enter】键触发的事件,在事件属性的:KeyPress中双击即可

 

 

9.想在一种控件里的事件当中调用另一个控件当中的某个事件时用:“控件名+PerformClick()” //这里只是调用另一个控件当中的Click事件的方法 例如:private void textBoxSend_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Return) { //触洌?发ぁ閎uttonSend的?Click事?件t buttonSend.PerformClick(); } }//这是textbox控件中按下【Enter】后触发的事件

 

 

10.不同线程之间互相调用他们的控件的事件的方法: 例如: private delegate void MessageDelegate(string message); private void AddTalkMessage(string message) { if (richTextBoxTalkInfo.InvokeRequired) { MessageDelegate d = new MessageDelegate(AddTalkMessage); richTextBoxTalkInfo.Invoke(d, new object[] { message }); } else { richTextBoxTalkInfo.AppendText(message + Environment.NewLine); richTextBoxTalkInfo.ScrollToCaret(); } } //现在我们一步一步来分析这个代码: private delegate void MessageDelegate(string message)//是为了建立委托 MessageDelegate d = new MessageDelegate(AddTalkMessage); richTextBoxTalkInfo.Invoke(d, new object[] { message }); //以上两句代码可以理解为:AddTalkMessage函数委托给了委托的对 像d,然后就可以在当前进程中用另一个线程中的richTextBoxTalkInfo 控件来调用AddTalkMessage方法(AddTalkMessage方法是另一个线程当中的方法) 从而实现对控件AddTalkMessage的操作 richTextBoxTalkInfo.AppendText(message + Environment.NewLine); //AppendText()方法是把richTextBoxTalkInfo和现在加在一起后赋给 richTextBoxTalkInfo,相当于+号// //Environment.NewLine相当于回车换行 richTextBoxTalkInfo.ScrollToCaret();//利用的是是richTextBox的ScrollToCaret属性 ,即将控件的内容滚动到当前插入符号位置。 if (richTextBoxTalkInfo.InvokeRequired) //至于这个属性的解释在于:这个网站 http://wenku.baidu.com/link?url=bQXUHxO7TFl1s2hb3HK6ugJ3UMoXlwvp1tY4cIvcxxzJrje6koLf8i5D4E-gRhlABerf5G_s_7x21zkIo7nVPceJWpVz1W_ELzV0C_wlPhS