C#远程管理工具:TextBox无法换行显示CMD返回结果求助
解决TextBox中CMD返回结果不换行的问题
问题根源在于换行符的处理差异:Windows下的WinForms TextBox需要\r\n(CRLF)作为换行标识,你当前只发送了\n,Debug.WriteLine会自动适配系统换行规则,但TextBox不会识别单独的\n,所以导致内容拼接成一行。
修改方案一:发送时使用正确的换行符
在CMD输出处理代码中,将发送的换行符从\n改为\r\n,从源头适配Windows控件的换行需求:
private void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine) { StringBuilder strOutput = new StringBuilder(); if (!String.IsNullOrEmpty(outLine.Data)) { try { strOutput.Append(outLine.Data); Debug.WriteLine(strOutput); // 替换\n为\r\n,确保TextBox能识别换行 buffer = encoder.GetBytes("2 " + outLine.Data + "\r\n"); networkStream = newclient.GetStream(); networkStream.Write(buffer, 0, buffer.Length); networkStream.Flush(); } catch (Exception err) { } } }
修改方案二:接收时转换换行符(备选)
如果不想修改发送端代码,可以在服务器端填充TextBox时,将收到的\n替换为系统默认换行符:
private void updateText(TextBox text, string strdata) { text.Invoke((MethodInvoker)delegate { // 将单独的\n替换为Windows系统默认换行符 string content = strdata.Substring(2).Replace("\n", Environment.NewLine); text.AppendText(content); }); }
两种方案任选其一即可,推荐方案一,从发送环节保证格式正确性更规范。
内容的提问来源于stack exchange,提问作者user12722902
相关产品推荐
相关产品推荐

