Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决两个不同图形之间的度量值字符串计算?_C#_Winforms - Fatal编程技术网

C# 如何解决两个不同图形之间的度量值字符串计算?

C# 如何解决两个不同图形之间的度量值字符串计算?,c#,winforms,C#,Winforms,我从PaintEventArgs获得图形,并通过测量方法测量字符串 Public class CustomControl: Control { protected override void OnPaint(PaintEventArgs pe) { Graphics g= pe.Graphics; SizeF size = g.MeasureString("Print a character and preview",font) } } 因此,我可以将上述文本设置为

我从PaintEventArgs获得图形,并通过测量方法测量字符串

Public class CustomControl: Control
{

    protected override void OnPaint(PaintEventArgs pe)
{
    Graphics g= pe.Graphics;
    SizeF size = g.MeasureString("Print a character and preview",font)
}

}
因此,我可以将上述文本设置为文本矩形(宽度=154,高度=18)

如果我对PrintDocument使用了上述场景,则会给出不同的解决方案

public class CustomPrintDocument : PrintDocument
{
    protected override void OnPrintPage(PrintPageEventArgs e)
    {
Graphics g= e.Graphics;
    SizeF size = g.MeasureString("Print a character and preview",font)

}
}
在上述场景中,我无法在CustomPrintDocument中以矩形绘制全文,也无法从CustomControl获取图形,因为预览文档时CustomControl未处于活动状态

我的查询需要像CustomControl一样在CustomPrintDocument中绘制文本

截图

注: 我不想更改文本的字体以适应CustomPrintDocument

请建议我解决这个问题


谢谢

没有足够的信息回答您的问题。在这两种情况下,您应该使用相同的布局逻辑,但使用当前
图形中的特定指标。为什么你不能“用矩形画全文”?只要您考虑到正在绘制的空间的实际尺寸,以及正在绘制的字符串的当前度量,它就应该起作用。请修正您的问题,使其包含一个清晰的显示您尝试了什么的好方法,并准确地解释代码的作用以及您想要的内容。您必须将您的专栏扩大,以便打印出来。我猜你是在试图避免这种类型的代码。屏幕和打印机的缩放比例略有不同。您的显示器以每英寸96像素的速度运行,PrintDocument以每英寸100像素的速度运行。100/96~=1.042和157.09/150.81~=1.042。因此,您必须稍微调整缩放比例以获得精确匹配。请记住,显示器也可以在更高的设置下工作(120、144是常见的),因此硬编码框大小不是一个好主意。只需使打印版面完全独立于控件版面,不必给它们相同的字体即可。@HansPassant谢谢您的回复。有没有关于这个的参考链接?
public class CustomPrintDocument : PrintDocument
{
    protected override void OnPrintPage(PrintPageEventArgs e)
    {
Graphics g= e.Graphics;
    SizeF size = g.MeasureString("Print a character and preview",font)

}
}
Output: {Width = 157.093277 Height = 15.2628555}
Height: 15.2628555
IsEmpty: false
Width: 157.093277