在我看来,有两种解决方案。第一个是自己将波形位图绘制到控件上(因此使用了全部可用空间,但有点拉伸位图)。第二个是围绕您的控件构建一些面板并相应地调整它们的大小(使图形始终以正确的纵横比显示,但浪费屏幕空间并且更复杂)。
1我不知道 zedgraph 是如何工作的,但我提出以下建议。从您正在编写的内容来看,它是一个用户控件。我要做的是听它的 onPaint 方法。您将获得一个图形对象,您可以自由地使用它在控件上绘制任何东西(包括位图)。参考控件的大小,您可以轻松地绘制具有相应纵横比的位图。
2
创建一个容器来保存图形控件并添加四个面板,一个用于顶部、底部、左侧和右侧。就像在这张图片上一样:
您现在可以根据需要的纵横比调整这些大小。为此,您必须监听两个事件,一个是 ResizeEnd 事件(当用户完成调整控件大小时调用该事件)和一个在窗体最大化时监听的事件(示例)。需要执行的代码如下:
private void AdjustPanels(object sender, EventArgs e)
{
double desiredAspectRatio = 1;
// I am using the form itself as a reference to the size and aspect ration of the application.
// you can, of course, use any other control instead (e.g. a panel where you stuff all the other panels
int width = this.Width;
int height = this.Height;
double formAspectRatio = (double)width / (double)height;
int marginLeft=0, marginRight=0, marginTop=0, marginBottom=0;
if (desiredAspectRatio > formAspectRatio)
{
// high aspect ratios mean a wider picture -> the picture we want is wider than what it currently is
// so we will need a margin on top and bottom
marginLeft = 0; marginRight = 0;
marginTop = (int)((height - desiredAspectRatio * width) / 2);
marginBottom = (int)((height - desiredAspectRatio * width) / 2);
}
else
{
marginTop = 0; marginBottom = 0;
marginLeft = (int)((width - desiredAspectRatio*height)/2);
marginRight = (int)((width - desiredAspectRatio * height) / 2);
}
pnlTop.Height = marginTop;
pnlBottom.Height = marginBottom;
pnlLeft.Width = marginLeft;
pnlRight.Width = marginRight;
}
当然,您必须将“desiredAspectRation”的值替换为波形图像的纵横比。如果您需要进一步的帮助,只需向我发送包含您的电子邮件地址的私人消息,我将向您发送完整的 Visual Studio 解决方案。