2012-03-22 3 views
0

私は本当に面倒な問題があります: 私はコラボレーションテキストエディタでC#で作業しています。リストのすべてのクライアントが共有テキストボックスを編集するときには必要ですが、キーボード変換からの文字。今コラボレーティブなテキストエディタ

private void downKey(object sender, KeyEventArgs e) 
    { 
     try 
     { 
      byte[] data; 

      switch (e.KeyCode) 
      { 
       case Keys.Enter: data = Encoding.UTF8.GetBytes("enter"); 
        break; 
       case Keys.Back: data = Encoding.UTF8.GetBytes("backspace"); 
        break; 
       case Keys.Space: data = Encoding.UTF8.GetBytes("space"); 
        break; 
       default: 


         data = Encoding.UTF8.GetBytes(e.KeyCode.ToString().ToLower()); 


        break; 
      } 

      TcpClient.GetStream().Write(data, 0, data.Length); 

     } 
     catch (SocketException se) 
     { 
      MessageBox.Show(se.Message); 
     } 
    } 

everyclientの「OnDataReceived」コールバックでのtextBox.Soの入力にバイト配列を受け取るべきアプリケーションに接続されたクライアントのリストからすべてのクライアント:ここ はのKeyDownイベントのコードですこのバイト配列を文字列に変換し、すべてのクライアントのtextboxをcrossThreadDelegateで更新しようとします。

public void OnDataReceived(IAsyncResult asyn) 
    { 
     try 
     { 
      TcpSpecificPacket theSockId = (TcpSpecificPacket)asyn.AsyncState; 
      int dataReceivedLength = theSockId.thisClient.GetStream().EndRead(asyn); 
      if (dataReceivedLength != 0) 
      { 
       textBoxArrived.Invoke(changeCrossTextBox, new object[] {Encoding.UTF8.GetString(theSockId.dataBuffer, 0, dataReceivedLength)}); 

       WaitForData(); 
      } 
     } 
     catch (IOException) 
     { 

     } 

そして今crossThreadデリゲートの定義:

private void changeCrossTextBox(string mesaj) 
    { 

     if (mesaj.Equals("enter")) 
     { 
      textBoxArrived.Text += Environment.NewLine; 
     } 
     else if (mesaj.Equals("space")) 
     { 
      textBoxArrived.Text += " "; 

     } 
     else if (mesaj.Equals("backspace")) 
     { 
      textBoxArrived.Text = textBoxArrived.Text.Substring(0, textBoxArrived.Text.Length - 1); 
     } 
     else 
     { 
      textBoxArrived.Text += mesaj; 
     } 
    } 

しかし、私の本当の問題は次である:私はよく、エスケープ文字を識別することはできません私はバイト配列を送信したため、私はそれを変換します私はその文字列ですべてのクライアントのテキストボックスを更新しようとします。たとえばShiftキーを押したときに、クライアントのすべてのTextBoxの文字列が「shiftKey」になります。これらのエスケープ文字を処理する方法を教えてもらえますか?ASCIIで送信および更新するメソッドはありますか?

答えて

0

あなたの質問に尋ねているのは100%ではありませんが、非制御文字を含むように文字列をフィルタリングする場合は、これを使用できます。コードを変更してOnKeyPressイベントOnKeyDown

if(!char.IsControl(e.KeyChar)) 
{ 
    //Do Stuffz 
} 

あなたが使用できる「文字」オブジェクトにキーコードをテストするためのものがたくさんあります。

char.IsLetterOrDigit, char.IsPunctuation ...など

+0

はあなたに感謝!助けたこと –

関連する問題