首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 撰寫簡易聊天程式(八):主視窗完整程式碼與事件串接

     編輯:關於C語言

PrimaryForm 完整程式碼

public partial class PrimaryForm : Form
{
    private Talker talker;
    private string userName;

    public PrimaryForm(string name)
    {
        InitializeComponent();
        userName = lbName.Text = name;
        this.Text = userName + " Talking ...";
        talker = new Talker();
        talker.ClientLost += talker_ClientLost;
        talker.ClientConnected += talker_ClientConnected;
        talker.MessageReceived += talker_MessageReceived;
        talker.PortNumberReady += PrimaryForm_PortNumberReady;
    }

    void PrimaryForm_PortNumberReady(int port)
    {
        lbPort.Invoke((Action)(() => lbPort.Text = port.ToString()));
    }

    void talker_MessageReceived(string msg)
    {
        txtContent.Invoke((Action)(() => txtContent.Text += msg));
    }

    void talker_ClientConnected(IPEndPoint ep)
    {
        txtContent.Invoke((Action)(() =>
        {
            IPHostEntry host = Dns.GetHostEntry(ep.Address);
            txtContent.Text += String.Format("System[{0}]:\r\n遠端主機 {1} 連線至本地。\r\n", DateTime.Now, ep);
        }));
    }

    void talker_ClientLost(string info)
    {
        txtContent.Invoke((Action)(() =>
            txtContent.Text += String.Format("System[{0}]:\r\n{1}\r\n", DateTime.Now, info)));
    }

    private void btnSend_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(txtMessage.Text))
        {
            MessageBox.Show("請輸入內容!");
            txtMessage.Focus(); return;
        }
        Message msg = new Message(userName, txtMessage.Text);
        if (talker.SendMessage(msg))
        {
            txtContent.Text += msg.ToString();
            txtMessage.Clear();
        }
        else
        {
            txtContent.Text += String.Format("System[{0}]:\r\n遠端主機已斷線\r\n", DateTime.Now);
            DisconnectStatus();
        }
    }

    private void btnConnect_Click(object sender, EventArgs e)
    {
        string host = txtHost.Text;
        if (string.IsNullOrEmpty(host)) { MessageBox.Show("主機名稱不可空"); return; }
        if (!int.TryParse(txtPort.Text, out int port)) { MessageBox.Show("連接埠需為數字"); return; }

        if (talker.ConnectByHost(host, port) || talker.ConnectByIp(host, port))
        {
            ConnectStatus();
            txtContent.Text += String.Format("System[{0}]:\r\n已連線至遠端\r\n", DateTime.Now);
        }
        else MessageBox.Show("遠端主機不存在或拒絕連線");
        txtMessage.Focus();
    }

    private void btnClose_Click(object sender, EventArgs e) { talker.Dispose(); Application.Exit(); }
    private void PrimaryForm_FormClosing(object sender, FormClosingEventArgs e) { talker.Dispose(); Application.Exit(); }
    private void btnSignout_Click(object sender, EventArgs e) { talker.SignOut(); DisconnectStatus(); txtContent.Text += String.Format("System[{0}]:\r\n已登出\r\n", DateTime.Now); }
    private void btnClear_Click(object sender, EventArgs e) { txtContent.Clear(); }
}

SignOut() 僅斷線;Dispose() 釋放資源並結束應用程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved