В общем я конечно пошаманил не совсем представляя что делаю:
- Код: Выделить всё
Imports System.Drawing.Drawing2D
Imports System.Drawing
Public Class Form1
Dim GP As New GraphicsPath
Dim P As New Pen(Color.Black, 5)
'---БЛОК для PictureBox2---
Private Sub PictureBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
Dim FF As New FontFamily("Arial BLack")
Dim Pnt As New PointF(0.0!, 150.0!)
Dim Rect As Rectangle = PictureBox2.ClientRectangle
Dim FS As FontStyle = FontStyle.Regular
Dim SF As New StringFormat()
SF.LineAlignment = StringAlignment.Center
GP.AddEllipse(PictureBox2.ClientRectangle)
GP.AddString("Round", FF, FS, 100.0!, Pnt, SF)
PictureBox2.Region = New Region(GP)
End Sub
Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint
e.Graphics.FillPath(Brushes.AliceBlue, GP)
e.Graphics.DrawPath(P, GP)
End Sub
'-----------------------------------------------------------------------------
'---Блок для PictureBox3---
Private Sub PictureBox3_BackColorChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox3.BackColorChanged
Dim FF As New FontFamily("Arial BLack")
Dim Pnt As New PointF(0.0!, 150.0!)
Dim Rect As Rectangle = PictureBox3.ClientRectangle
Dim FS As FontStyle = FontStyle.Regular
Dim SF As New StringFormat()
SF.LineAlignment = StringAlignment.Center
GP.AddEllipse(PictureBox3.ClientRectangle)
GP.AddString("Round", FF, FS, 100.0!, Pnt, SF)
PictureBox3.Region = New Region(GP)
End Sub
Private Sub PictureBox3_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox3.Paint
e.Graphics.FillPath(Brushes.AliceBlue, GP)
e.Graphics.DrawPath(P, GP)
End Sub
'-------------------------------------------------------------------------------
End Class
Я вместо формы подставил этот код для PictureBox, и изменил события : для PictureBox2 - Click, а для PictureBox3 - BackColorChanged (ставил LoadCompleted, но эффекта не было).
Вид в дизайнере:
Если закомментировать блок для PictureBox3, и кликнуть на левой двери (PictureBox2), то получим такое:
Если закомментировать блок для PictureBox2, то получим такое:
Если раскомментировать оба блока и кликнуть на левой двери, то будет так:
Тут почему-то рисунок PictureBox3 появился на PictureBox2.
Короче такая фигня. Хз может она поможет если к примеру в рисунке двери залить каким-нибудь цветом прозрачные углы, а потом программно исключить его с помощью всей этой фишки. Или подложить под дверь бэкграундный рисунок (свойство пикчербокса BackgroundImage) и сделать его прозрачным, хз тут сам контейнер снановится прозрачным с рисунками или без.
Короче всё это фигня. Мне кажется можно попробовать под рисунок двери просто подложить бэкграунд и передавать ему изображение того, что находится под пикчербоксом. То есть снять координаты пикчербокса, его размеры, и сделать скриншот того что под ним и передать это бэкграунду. Если кто-то может - прошу помочь.
Файл проекта:
http://rapidshare.com/files/76356893/PictureBox2.rar.html