如何在重写的OnPaint方法中实现ImageAlign.MiddleCenter
正如主题行所解释的那样。
我想在 Button 的 Image 属性中实现行为 ImageAlign.MiddleCenter .NET 中的控件
我正在重写按钮的 OnPaint 事件。 我使用e.Graphics.DrawImage(Image,oDrawRectagle); 在 Button 控件内绘制图像。 然而,它总是出现在按钮的左侧。 由于 oDrawRectagle 始终返回 ClientRectangle 的 0,0 坐标。
我希望图像始终对齐ImageAlign.MiddleCenter。我该如何实现它?
谢谢
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
int iHeight;
int iWidth;
if (Image != null)
{
//newSize = MaintainAspectRatio(Image, ClientRectangle.Width, ClientRectangle.Height);
//iHeight = newSize.Height;
//iWidth = newSize.Width;
Rectangle ResizedRectangle = MaintainAspectRatio(Image,ClientRectangle);
iHeight = ResizedRectangle.Height;
iWidth = ResizedRectangle.Width;
}
else
{
iWidth = ClientRectangle.Width;
iHeight = ClientRectangle.Height;
}
g.FillRectangle(new SolidBrush(Color.FromArgb(213, 221, 224)), ClientRectangle);
// Draw border
Color oLeftTopColor = SystemColors.ControlLightLight;
Color oRightBottomColor = SystemColors.ActiveCaption;
Pen oLeftTopPen = new Pen(oLeftTopColor);
Pen oRightBottomPen = new Pen(oRightBottomColor);
// top line
g.DrawLine(oLeftTopPen, 0, 0, iWidth - 1, 0);
//g.DrawLine(new Pen(SystemColors.ControlLight), 1, 1, iWidth-2, 1);
// bottom line
g.DrawLine(oRightBottomPen, 0, iHeight, iWidth - 1, iHeight);
//g.DrawLine(new Pen(SystemColors.ControlDark), 1, iHeight-2, iWidth-2, iHeight-2);
// right line
g.DrawLine(oRightBottomPen, iWidth, 0, iWidth, iHeight - 1);
//g.DrawLine(new Pen(SystemColors.ControlDark), iWidth-2, 1, iWidth-2, iHeight-2);
// left line
g.DrawLine(oLeftTopPen, 0, 0, 0, iHeight - 1);
//g.DrawLine(new Pen(SystemColors.ControlLightLight), 1, 1, 1, iHeight-2);
// Draw image
if (Image != null)
{
//Rectangle oDrawRectagle = new Rectangle(
// 8, 5, iWidth - 20, iHeight - 10);
Rectangle oDrawRectagle = new Rectangle(
0, 0, iWidth, iHeight);
if (Enabled == false)
{
e.Graphics.DrawImage(Image, oDrawRectagle,
0, 0, Image.Width, Image.Height,
GraphicsUnit.Pixel);
}
else
{
e.Graphics.DrawImage(Image,oDrawRectagle);
}
}
// Draw text
if (Text != null)
{
int iTextTop = 5;
int iTextLeft = 5;
int iMaxTextWidth = iWidth - 10;
int iMaxTextHeight = iHeight - 10;
}
}
As the subject line explains it.
I want to achieve the behaviour ImageAlign.MiddleCenter in the Image property of a Button
control in .NET
i am overriding the Button's OnPaint event.
I use e.Graphics.DrawImage(Image,oDrawRectagle);
to paint the image inside the Button control.
However this always appears on the Lefthand side of the Button.
Since the oDrawRectagle always returns the 0,0 co-ordinates for the ClientRectangle.
I want the image to be always aligned ImageAlign.MiddleCenter. How do i achieve it ?
Thanks
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
int iHeight;
int iWidth;
if (Image != null)
{
//newSize = MaintainAspectRatio(Image, ClientRectangle.Width, ClientRectangle.Height);
//iHeight = newSize.Height;
//iWidth = newSize.Width;
Rectangle ResizedRectangle = MaintainAspectRatio(Image,ClientRectangle);
iHeight = ResizedRectangle.Height;
iWidth = ResizedRectangle.Width;
}
else
{
iWidth = ClientRectangle.Width;
iHeight = ClientRectangle.Height;
}
g.FillRectangle(new SolidBrush(Color.FromArgb(213, 221, 224)), ClientRectangle);
// Draw border
Color oLeftTopColor = SystemColors.ControlLightLight;
Color oRightBottomColor = SystemColors.ActiveCaption;
Pen oLeftTopPen = new Pen(oLeftTopColor);
Pen oRightBottomPen = new Pen(oRightBottomColor);
// top line
g.DrawLine(oLeftTopPen, 0, 0, iWidth - 1, 0);
//g.DrawLine(new Pen(SystemColors.ControlLight), 1, 1, iWidth-2, 1);
// bottom line
g.DrawLine(oRightBottomPen, 0, iHeight, iWidth - 1, iHeight);
//g.DrawLine(new Pen(SystemColors.ControlDark), 1, iHeight-2, iWidth-2, iHeight-2);
// right line
g.DrawLine(oRightBottomPen, iWidth, 0, iWidth, iHeight - 1);
//g.DrawLine(new Pen(SystemColors.ControlDark), iWidth-2, 1, iWidth-2, iHeight-2);
// left line
g.DrawLine(oLeftTopPen, 0, 0, 0, iHeight - 1);
//g.DrawLine(new Pen(SystemColors.ControlLightLight), 1, 1, 1, iHeight-2);
// Draw image
if (Image != null)
{
//Rectangle oDrawRectagle = new Rectangle(
// 8, 5, iWidth - 20, iHeight - 10);
Rectangle oDrawRectagle = new Rectangle(
0, 0, iWidth, iHeight);
if (Enabled == false)
{
e.Graphics.DrawImage(Image, oDrawRectagle,
0, 0, Image.Width, Image.Height,
GraphicsUnit.Pixel);
}
else
{
e.Graphics.DrawImage(Image,oDrawRectagle);
}
}
// Draw text
if (Text != null)
{
int iTextTop = 5;
int iTextLeft = 5;
int iMaxTextWidth = iWidth - 10;
int iMaxTextHeight = iHeight - 10;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用按钮大小和图像大小手动将位置更改为中心。
You can just manually change the position to the center using the button size and the image size.