我正在使用C#为Windows Mobile应用程序创建致命错误对话框。问题是当我尝试使用DrawString
绘制堆栈跟踪时,我的一半堆栈跟踪被剪掉了,因为DrawString
使用自动换行而不是字符换行。
对于那些不理解解释的人:
当我绘制堆栈跟踪时,它出现如下:
at
company.application.name.space.Funct
at
company.application.name.Function(St
at
etc. etc.
我希望它像这样打印:
at
company.application.name.space.Funct
ion(String sometext, Int32 somenumbe
r)
at
company.application.name.Function(St
ring sometext, Int32 somenumber, Int
32 anothernumber)
at
etc. etc.
这可能在Csharp吗?
重现问题:
创建一个新的智能设备项目。 (设备申请)
使用以下内容替换Form1代码:
public partial class Form1 : Form
{
RectangleF _rect = new RectangleF();
String _stackTrace = @"at System.Net.Sockets.Socket.ReceiveNoCheck(Byte[] buffer, Int32 index, Int32 request, SocketFlags socketFlags)
at System.Net.Sockets.Socket.ReceiveAsyncRequest.doRequest()
at System.Net.Sockets.Socket.AsyncRequest.handleRequest()
at System.Net.Sockets.Socket.WorkerThread.doWork()
at System.Net.Sockets.Socket.WorkerThread.doWorkI(Object o)
at System.Threading.ThreadPool.WorkItem.doWork(Object o)
at System.Threading.Timer.ring()";
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
_rect.X = 24 * factor.Width;
_rect.Y = 10 * factor.Height;
_rect.Width = 192 * factor.Width;
_rect.Height = 274 * factor.Height;
}
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (Pen borderPen = new Pen(this.ForeColor, 1))
{
Rectangle borderRect = Rectangle.Round(_rect);
borderRect.Inflate(1, 1);
e.Graphics.DrawRectangle(borderPen, borderRect);
}
using (StringFormat stringFormat = new StringFormat())
using (SolidBrush stringBrush = new SolidBrush(this.ForeColor))
{
e.Graphics.DrawString(_stackTrace, this.Font, stringBrush, _rect, stringFormat);
}
}
}
运行项目。
答案 0 :(得分:0)
如果你使用带有RectangleF的DrawString的重载,它应该使用字符包装。你是如何调用DrawString()的?