2016-12-07 3 views
-1

У меня короткая проблема. Как я могу нарисовать этот вид изображения в верхней части любого controls как textbox и т.д.Выполнение Paint в верхней части нескольких элементов управления

Это мой код:

Private Sub GroupBox6_Paint(sender As Object, e As PaintEventArgs) Handles GroupBox6.Paint 
    If txtStatus.Text = "Cancelled" Then 
     Try 
      Dim newImage As Image = Image.FromFile(FOLDER_PATH & "\completed.png") 
      Dim x As Single = ((GroupBox6.Width/2) - (463/4)) 
      Dim y As Single = 10 
      Dim width As Single = 463/2 
      Dim height As Single = 242/2 
      e.Graphics.DrawImage(newImage, x, y, width, height) 
     Catch ex As Exception 
     End Try 
    End If 
End Sub 

И это мой выход:

enter image description here

так моя цель - нарисовать изображение Completed в верхней части textbox, label внутри моей groupbox любой идеи?

+0

Вы хотите показать изображение в качестве наложения, когда пользователь завершил процесс и скрыть основные элементы управления? Я думаю, что проще использовать элемент управления PictureBox, который отображается вместо Groupbox, когда статус «Отменен» вместо рисования изображения в групповом поле. – Markus

+0

@Markus, если я использую окно с картинкой, это непрозрачно, поэтому я рисую изображение на элементе управления, который будет удерживать его. но в моем случае txtbox и ярлык покрывают изображение. я просто хочу его нарисовать и, возможно, отправить его на фронт gropbox и другого элемента управления внутри группового ящика. – Muj

+1

Есть два решения, о которых я могу думать. 1. Создайте многоуровневое окно и покажите его поверх элементов управления. 2. Сделайте снимок экрана, в котором будет отображаться изображение, и нарисуйте его на picbox, а затем нарисуйте png изображение –

ответ

0

Для этого вам нужны два bitmaps и picturebox. Первый из них является png изображения, а второй picturebox изображения:

Private pngImage, picBoxImage As Image 

В случае загрузки формы инициализации два изображения:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    pngImage = Image.FromFile(FOLDER_PATH & "\completed.png") //load it once 
    picBoxImage = CType(pngImage.Clone, Image) 

    PictureBox1.Size = New Size(CInt(463/2), CInt(242/2)) 
    PictureBox1.Parent = GroupBox6 
    PictureBox1.Image = picBoxImage 
    PictureBox1.Visible = False //you dont want it at the beggining 
End Sub 

суб показать PictureBox:

Private Sub ShowCompletedMessage() 
    Dim screenLocation As Point 
    Dim gr As Graphics 
    //you can pass these values as parameters in the sub if you want to make the code more generic 
    Dim x As Integer = CInt(((GroupBox6.Width/2) - (463/4))) 
    Dim y As Integer = 10 
    Dim width As Integer = CInt(463/2) 
    Dim height As Integer = CInt(242/2) 

    //Ensure that picturebox is not visible. If it is you don't need to take a screenshot 
    If PictureBox1.Visible = True Then 
     Return 
    End If 

    gr = Graphics.FromImage(picBoxImage) 

    //you need to transform the coordinates to screen ones 
    screenLocation = GroupBox6.PointToScreen(New Point(x, y)) 

    //draw the portion of the screen to your bitmap 
    gr.CopyFromScreen(screenLocation.X, screenLocation.Y, 0, 0, New Size(width, height), CopyPixelOperation.SourceCopy) 

    //draw the png image on top 
    gr.DrawImage(pngImage, 0, 0, width, height) 

    PictureBox1.Location = New Point(x, y) 
    PictureBox1.BringToFront() 
    PictureBox1.Visible = True 

    gr.Dispose() 
    gr = Nothing 


    Return 

End Sub 

Каждый раз, когда вы хотите показать сообщение, вызовите вышеуказанный подраздел. Вы решаете, где и когда. Вам нужно, чтобы скрыть picturebox если вам не нужно больше

PictureBox1.Visible = False 
+0

Любая причина для голосования. –

+0

где я должен помещать этот код в свою форму? внутри группового события рисования? так что я могу попробовать его и увидеть результат – Muj

+0

@Muj Do * width *, * height * и * position * изменения изображения png? Конечно, позиция будет относиться к * GroupBox6 *. –

Смежные вопросы