gpt4 book ai didi

.net - Graphics.DrawRectangle 在第二个屏幕上缺少边缘

转载 作者:行者123 更新时间:2023-12-02 04:43:53 26 4
gpt4 key购买 nike

我正在尝试在表单上绘制可变颜色/宽度的边框(用于“整个房间”状态报告),它绘制得很好,除非在非主要显示器上最大化...

在第二个显示器上最大化时,我没有绘制最左边的边缘,如图所示 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com