私は本当に面倒な問題があります: 私はコラボレーションテキストエディタで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で送信および更新するメソッドはありますか?
はあなたに感謝!助けたこと –