- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在表单上绘制可变颜色/宽度的边框(用于“整个房间”状态报告),它绘制得很好,除非在非主要显示器上最大化...
在第二个显示器上最大化时,我没有绘制最左边的边缘,如图所示 here (为调试添加了绿色矩形,并且始终显示正常)。
我尝试了多种绘制顺序排列、+/-1 像素、更改笔属性等。但似乎没有任何效果,事实上它在任何地方都没有最大化并在主屏幕上最大化,这让我觉得它是更微妙的东西。
要重现的完整代码是(具有单个按钮的单一尺寸表单):
Public Class Form2
Private DrawHighlightingRectangle As Boolean = False
Private HighlightingRectangleColour As Color = Color.Red
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
If DrawHighlightingRectangle Then
Dim myPen As New System.Drawing.Pen(HighlightingRectangleColour, 8)
myPen.Alignment = Drawing2D.PenAlignment.Inset
e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawRectangle(myPen, 0, 0, Me.ClientRectangle.Width, Me.ClientRectangle.Height)
myPen.Color = Color.Green
' e.Graphics.DrawLine(myPen, 0, 0, 0, 100)
e.Graphics.DrawRectangle(myPen, 0, 0, 100, 100)
myPen.Dispose()
End If
End Sub
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DrawHighlightingRectangle = Not DrawHighlightingRectangle
Me.Invalidate()
Me.Update()
End Sub
End Class
调试 x,y 和 Me.ClientRectangle(应该是我正在使用的 ClientRectangle,对吧?)大小确认它们是正确的。
有什么想法吗?
编辑:
将 Me.ClientRectangle.Width 更改为 var 以进行更深入的调试,新的完整代码是;
Public Class Form2
Private DrawHighlightingRectangle As Boolean = False
Private HighlightingRectangleColour As Color = Color.Red
Private MyWidth = 1900
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
If DrawHighlightingRectangle Then
Dim myPen As New System.Drawing.Pen(HighlightingRectangleColour, 8)
e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawRectangle(myPen, 0, 0, MyWidth, Me.ClientRectangle.Height)
myPen.Color = Color.Green
e.Graphics.DrawRectangle(myPen, 0, 0, 100, 100)
myPen.Dispose()
End If
End Sub
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DrawHighlightingRectangle = Not DrawHighlightingRectangle
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
MyWidth += 1
Me.Invalidate()
Me.Update()
End Sub
End Class
(请记住将 MyWidth 从 1900 更改为匹配您的设置!)
使用这种方法我可以增加宽度并观察矩形增长,但是当接近正确的全宽时左边缘消失 - 改变笔的宽度会影响它何时消失(我删除了 Pen.Alignment = Inset万一这是一个问题)但无论哪种方式我都无法获得我想要的输出...
最佳答案
看起来像一个错误。解决方法是,当您在非主屏幕上全屏显示时,您应该有 TopLeft=Pen.Width-1
。在所有其他情况下,矩形需要有 TopLeft=CInt(Math.Floor(Pen.Width/2))
。确保相应地调整矩形的宽度
此外,我注意到您无法使用宽度超过 1 像素的笔绘制到左边距。试用以下示例代码
Public Class Form1
Private DrawHighlightingRectangle As Boolean = True
Private HighlightingRectangleColour As Color = Color.Red
Private PenWidth = 1
Dim myPen As New System.Drawing.Pen(HighlightingRectangleColour, PenWidth)
Dim x = 0
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Text = "Pen Width = " & PenWidth & ", X = " & x
myPen.Alignment = Drawing2D.PenAlignment.Inset
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
If DrawHighlightingRectangle Then
e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawLine(myPen, x, 100, x, 200)
e.Graphics.DrawLine(myPen, CInt(Math.Floor(PenWidth / 2)), 10, CInt(Math.Floor(PenWidth / 2)), 100)
End If
End Sub
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' draw button
DrawHighlightingRectangle = Not DrawHighlightingRectangle
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' Move Right
x += 1
Text = "Pen Width = " & PenWidth & ", X = " & x
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click ' increase pen width
PenWidth += 1
myPen.Dispose()
myPen = New System.Drawing.Pen(HighlightingRectangleColour, PenWidth)
Text = "Pen Width = " & PenWidth & ", X = " & x
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click ' reset width and X
PenWidth = 1
x = 0
myPen.Dispose()
myPen = New System.Drawing.Pen(HighlightingRectangleColour, PenWidth)
Text = "Pen Width = " & PenWidth & ", X = " & x
Me.Invalidate()
Me.Update()
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click ' Move Left
x -= 1
Text = "Pen Width = " & PenWidth & ", X = " & x
Me.Invalidate()
Me.Update()
End Sub
End Class
关于.net - Graphics.DrawRectangle 在第二个屏幕上缺少边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035991/
我有一个 wxFrame 和几个 wxTextCtrl 以及派生自 wxWindow 的自定义 Image Class 的其他成员> 并且有一个 wxImage 成员。 在 wxFrame 的 OnP
好吧,我正在为我自己的控件编写 OnPaint 事件,我非常需要使其像素精确。 我在矩形边框方面遇到了一点问题。 看图: 删除了无效的 ImageShack 链接 这两个矩形是使用相同的位置和大小参数
我正在尝试在表单上绘制可变颜色/宽度的边框(用于“整个房间”状态报告),它绘制得很好,除非在非主要显示器上最大化... 在第二个显示器上最大化时,我没有绘制最左边的边缘,如图所示 here (为调试添
我有一个全屏表单,在 Paint 事件的处理程序中,我在整个表单周围绘制了一个 2px 的边框。我为连接到计算机的每个屏幕创建了这些表格之一。出于某种原因,顶部和左侧边框未绘制在任何非主显示器上。窗体
几乎每次我使用 Graphics.DrawRectangle或 Graphics.FillRectangle (int 版本)我似乎错过了要绘制的矩形的右侧和底部边框上的像素。 哪些像素被填充的确切定
我正在绘制一个矩形,休眠了几毫秒——然后我想清除该矩形,但我不知道如何清除。 (该矩形位于图形上方,因此我不能简单地用另一个矩形覆盖它) graphics.DrawRe
当我在图像中绘制红色正方形时,我希望该正方形中的像素为“红色”。然而,它们却是黑色的...... >>> from SimpleCV import Image,Color >>> Color.RED
下面的 WPF 程序会显示一个如下所示的窗口: 黑色方 block 外的鼠标移动会导致窗口标题随鼠标位置更新。当鼠标进入正方形时停止更新。 我希望 MouseMove 继续触发,即使鼠标在正方形上也是
private void Form1_Paint(object sender, PaintEventArgs e) { Pen p = new Pen(Brushes.Black, 1);
我在我的应用程序中同时使用 Rectangle 和 graphicspath 绘制线条,当使用 GraphicsPath 而不是使用 Rectangle 时,我面临着绘图中宽度和高度的丢失。 下面是重
使用 DrawingContext 时. DrawRectangle与 TileBrush ,我注意到矩形的左上角不是底层图像的左上角。这发生在两个 DrawingBrush和 ImageBrush来
我的 highcharts-more.js 文件有问题。它开始在下面给我错误; CRIPT5007: Unable to get property 'drawRectangle' of undefin
这里的代码非常简单...只是在 OnPaint 例程中为 Form 绘制应该是 64x64 的矩形: protected override void OnPaint(PaintEventArgs e)
正如标题所说,我想用异或模式画一些东西,因为我想在一段时间后清理它。 我在 Visual Studio 2010 中使用 C#(窗口窗体)。 谁能帮我解决这个问题? 最佳答案 我为 .net 做了一个
我有以下代码: public void DrawLetter(int Cell, string Letter, int X, int Y) { System.Drawing.Font fBody
我是一名优秀的程序员,十分优秀!