주어진 크기와 X / Y POS로 VB.NET에서 원을 그리면 예기치 않은 결과가 발생합니다.

Samor1922

XY비아 의 지름과 중심점을 입력하면 원을 그리는 응용 프로그램을 만들고 있습니다. TextBoxPictureBox를 내부.

응용 프로그램을 실행하고 일정한 X와 Y를 입력했지만 원의 지름을 천천히 늘리거나 줄이면 X와 Y 위치가 일정하더라도 원이 임의의 위치에서 움직이기 시작합니다. 때로는 PictureBox변수가 변경되지 않은 경우 (X Pos, Y Pos 및 Diameter)를 새로 고치면 아무것도 변경되지 않았는데도 원이 아무 이유없이 움직입니다.

다음은 재현 할 코드입니다.

다음 변수는 이미 선언되었습니다.

    Dim beginSCircleXPos As Integer 'What the user put into as the circle's center for X
    Dim beginSCircleYPos As Integer 'What the user put into as the circle's center for y

    Dim sCircleXPos As Integer 'Top-Left point of the circle in X
    Dim sCircleYPos As Integer 'Top-Left point of the circle in Y
    Dim sCircleDiameter As Integer 'The diameter that user put into.


    Dim sCenterPointX As Integer 'Variables will be updated later
    Dim sCenterPointY As String

PictureBoxPaint이벤트

beginSCircleXPos = TextBox1.Text
        beginSCircleYPos = TextBox2.Text

        sCircleXPos = beginSCircleXPos - sCircleDiameter / 2
        sCircleYPos = beginSCircleYPos - sCircleDiameter / 2


        sCircleDiameter = TextBox3.Text


        Using path As New GraphicsPath
            path.AddEllipse(sCircleXPos, sCircleYPos, sCircleDiameter, sCircleDiameter)
            sCenterPointX = sCircleXPos + sCircleDiameter / 2
            sCenterPointY = sCircleYPos + sCircleDiameter / 2

            Using brush As New PathGradientBrush(path)
                brush.CenterPoint = New PointF(sCenterPointX, sCenterPointY) 
                brush.CenterColor = Color.FromArgb(0, Color.Orange)
                brush.SurroundColors = {Color.Orange}
                brush.FocusScales = PointF.Empty

                e.Graphics.FillRectangle(brush, sCircleXPos, sCircleYPos, sCircleDiameter, sCircleDiameter)
            End Using
        End Using

명령이 PictureBox있는 버튼을 클릭하면이 새로 고쳐진 다는 점은 주목할 가치가 PictureBox1.Refresh()있습니다.

중심점 입력과 X / Y 값이 매번 정확하고 일정한 답을 얻을 수 있도록이 문제를 어떻게 해결할 수 있습니까?

편집하다:

  beginSCircleXPos = Convert.ToSingle(TextBox1.Text)
        beginSCircleYPos = Convert.ToSingle(TextBox2.Text)


        sCircleXPos = beginSCircleXPos - sCircleDiameter / 2
        sCircleYPos = beginSCircleYPos - sCircleDiameter / 2


        sCircleDiameter = Convert.ToSingle(TextBox3.Text)






        Using path As New GraphicsPath
            path.AddEllipse(sCircleXPos, sCircleYPos, sCircleDiameter, sCircleDiameter)
            sCenterPointX = sCircleXPos + sCircleDiameter / 2
            sCenterPointY = sCircleYPos + sCircleDiameter / 2

            Using brush As New PathGradientBrush(path)
                brush.CenterPoint = New PointF(sCenterPointX, sCenterPointY) 
                brush.CenterColor = Color.FromArgb(0, Color.Orange)
                brush.SurroundColors = {Color.Orange}
                brush.FocusScales = PointF.Empty

                e.Graphics.FillRectangle(brush, sCircleXPos, sCircleYPos, sCircleDiameter, sCircleDiameter)
            End Using
        End Using
    ```
Variables:

Dim beginSCircleXPos As Single Dim beginSCircleYPos As Single

Dim sCircleXPos As Single
Dim sCircleYPos As Single
Dim sCircleDiameter As Single


Dim sCenterPointX As Single
Dim sCenterPointY As Single

jmcilhinney

나는 당신의 코드를 너무 자세히 보지 않았습니다. 나는 이전 질문에 답하기 위해 제공 한 코드를 여전히 가지고 있으므로 그것을 기초로 사용하고 내가 직접 할 것처럼 수정했습니다. 나는 그것을 조금 더 간단하게 만들기 위해 매초마다 한 번씩 Timer다시 칠하는 데 사용했습니다 PictureBox. 이것이 내가 끝낸 것입니다.

Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    Dim centreX As Single
    Dim centreY As Single
    Dim diameter As Single

    If Single.TryParse(TextBox1.Text, centreX) AndAlso
       Single.TryParse(TextBox2.Text, centreY) AndAlso
       Single.TryParse(TextBox3.Text, diameter) Then
        Dim radius = diameter / 2.0F
        Dim bounds As New RectangleF(centreX - radius,
                                     centreY - radius,
                                     diameter,
                                     diameter)

        Using path As New GraphicsPath
            path.AddEllipse(bounds)

            Using brush As New PathGradientBrush(path) With {.CenterPoint = New PointF(centreX, centreY),
                                                             .CenterColor = Color.FromArgb(0, Color.Orange),
                                                             .SurroundColors = {Color.Orange},
                                                             .FocusScales = PointF.Empty}
                e.Graphics.FillRectangle(brush, bounds)
            End Using
        End Using
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    PictureBox1.Invalidate()
End Sub

예상대로 작동하는 것 같았습니다. 하나 이상의에 TextBoxes유효한 숫자가 포함되어 있지 않으면 아무것도 그려지지 않았고, 그렇지 않으면 예상되는 위치와 방법으로 등급이 매겨진 원이 그려집니다. 중심 좌표를 설정하고 직경을 변경하면 그려진 원은 일정한 중심을 유지했지만 예상대로 커지고 축소되었습니다.

원하는 경우 a Button.Click대신 a 사용할 수 있습니다 Timer.Tick.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java에서 배치 파일을 실행하면 예기치 않은 결과가 발생합니다.

분류에서Dev

함수 내에서 malloc 및 realloc을 호출하면 예기치 않은 결과가 발생합니다.

분류에서Dev

PHP에서 MySQL 행 목록을 호출 (루핑)하면 예기치 않은 결과가 발생합니다.

분류에서Dev

Php를 사용하여 MYSQL 데이터베이스에서 주석을 가져 오면 예기치 않은 JSON 결과가 발생합니다.

분류에서Dev

PySpark에 가입하면 예기치 않은 결과가 발생합니다.

분류에서Dev

"%"로 작업하면 예기치 않은 결과가 발생합니다.

분류에서Dev

numpy 배열을 빼면 예기치 않은 결과가 발생합니다.

분류에서Dev

어레이를 다른 어레이에 저장하면 예기치 않은 결과가 발생합니까?

분류에서Dev

WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

분류에서Dev

WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

분류에서Dev

모달에서 주석을 편집 한 다음 주석 모달로 돌아가 삭제하면 예기치 않은 오류가 발생합니다.

분류에서Dev

문자에서 문자열을 선언하면 예기치 않은 결과가 발생합니다. 왜 그렇습니까?

분류에서Dev

GMP와 함께 C ++에서 RSA를 사용하여 파일을 해독하려고하면 예기치 않은 결과가 발생합니다.

분류에서Dev

C # 후기 평가로 인해 Dictionary.Add ()에서 예기치 않은 결과가 발생합니다.

분류에서Dev

react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

분류에서Dev

react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

분류에서Dev

Google 클라우드로 결제 수단을 추가하면 "예기치 않은 오류"가 발생합니다.

분류에서Dev

Bash 스크립팅 및 대용량 파일 (버그) : 리디렉션에서 내장 된 읽기로 입력하면 예기치 않은 결과가 발생합니다.

분류에서Dev

NSDictionary를 [NSDictionary]에 추가하면 예기치 않은 결과가 발생합니다.

분류에서Dev

Xamarin.Android에서 프로그램을 실행하면 단추 처리기를 만들 때 처리되지 않은 예외가 발생합니다.

분류에서Dev

음의 정수를 반대로하면 예기치 않은 결과가 발생합니다.

분류에서Dev

복식 배열을 인쇄하면 예기치 않은 결과가 발생합니다.

분류에서Dev

두 NSDate 개체의 동등성을 비교하면 예기치 않은 결과가 발생합니다.

분류에서Dev

복합 IF 문에서 % ProgramFiles (x86) %와 같은 괄호와 함께 환경 변수를 사용하면 예기치 않은 오류가 발생합니다.

분류에서Dev

OpenCV Mat를 나누면 예기치 않은 결과가 발생합니다.

분류에서Dev

예를 들어 hb (x, y)가 hb (y, x)와 동일하지 않기 전에 발생합니까?

분류에서Dev

C에서 주어진 치수 (x, y)로 ASCII 프레임 그리기

분류에서Dev

스트림 sorted ()로 인해 예기치 않은 결과가 발생합니다.

분류에서Dev

for 루프로 인해 예기치 않은 결과가 발생합니다.

Related 관련 기사

  1. 1

    Java에서 배치 파일을 실행하면 예기치 않은 결과가 발생합니다.

  2. 2

    함수 내에서 malloc 및 realloc을 호출하면 예기치 않은 결과가 발생합니다.

  3. 3

    PHP에서 MySQL 행 목록을 호출 (루핑)하면 예기치 않은 결과가 발생합니다.

  4. 4

    Php를 사용하여 MYSQL 데이터베이스에서 주석을 가져 오면 예기치 않은 JSON 결과가 발생합니다.

  5. 5

    PySpark에 가입하면 예기치 않은 결과가 발생합니다.

  6. 6

    "%"로 작업하면 예기치 않은 결과가 발생합니다.

  7. 7

    numpy 배열을 빼면 예기치 않은 결과가 발생합니다.

  8. 8

    어레이를 다른 어레이에 저장하면 예기치 않은 결과가 발생합니까?

  9. 9

    WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

  10. 10

    WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

  11. 11

    모달에서 주석을 편집 한 다음 주석 모달로 돌아가 삭제하면 예기치 않은 오류가 발생합니다.

  12. 12

    문자에서 문자열을 선언하면 예기치 않은 결과가 발생합니다. 왜 그렇습니까?

  13. 13

    GMP와 함께 C ++에서 RSA를 사용하여 파일을 해독하려고하면 예기치 않은 결과가 발생합니다.

  14. 14

    C # 후기 평가로 인해 Dictionary.Add ()에서 예기치 않은 결과가 발생합니다.

  15. 15

    react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

  16. 16

    react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

  17. 17

    Google 클라우드로 결제 수단을 추가하면 "예기치 않은 오류"가 발생합니다.

  18. 18

    Bash 스크립팅 및 대용량 파일 (버그) : 리디렉션에서 내장 된 읽기로 입력하면 예기치 않은 결과가 발생합니다.

  19. 19

    NSDictionary를 [NSDictionary]에 추가하면 예기치 않은 결과가 발생합니다.

  20. 20

    Xamarin.Android에서 프로그램을 실행하면 단추 처리기를 만들 때 처리되지 않은 예외가 발생합니다.

  21. 21

    음의 정수를 반대로하면 예기치 않은 결과가 발생합니다.

  22. 22

    복식 배열을 인쇄하면 예기치 않은 결과가 발생합니다.

  23. 23

    두 NSDate 개체의 동등성을 비교하면 예기치 않은 결과가 발생합니다.

  24. 24

    복합 IF 문에서 % ProgramFiles (x86) %와 같은 괄호와 함께 환경 변수를 사용하면 예기치 않은 오류가 발생합니다.

  25. 25

    OpenCV Mat를 나누면 예기치 않은 결과가 발생합니다.

  26. 26

    예를 들어 hb (x, y)가 hb (y, x)와 동일하지 않기 전에 발생합니까?

  27. 27

    C에서 주어진 치수 (x, y)로 ASCII 프레임 그리기

  28. 28

    스트림 sorted ()로 인해 예기치 않은 결과가 발생합니다.

  29. 29

    for 루프로 인해 예기치 않은 결과가 발생합니다.

뜨겁다태그

보관