PDA

View Full Version : حرفه ای: شیشه ای کردن تمام صفحه بدون شیشه ای کردن Object



zaeimh90
چهارشنبه 09 فروردین 1391, 14:34 عصر
سلام.
عید همتون مبارک.:قلب:
می خواستم اگر کسی میتونه کمکم کنه بگه چطوری میشه مثل عکس زیر تمام صفحه شیشه ای بشه ولی دکمه ها و دیگر آبجک های شیشه ای نباشه و یا opacity اونها 100 باشه و background مثلا 30 باشه.
ممنون میشم اگر کسی بتونه کمکم کنه.
http://s1.picofile.com/file/7339613117/3_28_2012_2_44_43_PM.png

mansour01
چهارشنبه 09 فروردین 1391, 16:23 عصر
درود اینکار عملا غیر ممکن هست ، در حالت عادی . به دلیل اینکه وقتی خصوصیت Opacity فرم تغییر پیدا کرد تمام کنترل های اون فرم این خاصیت رو به ارث می برن . در حقیقت بچه ها از فرم والد ارث می گیرن .
من خودم تا به حال به چنین موردی نیاز پیدا نکرده بودم ، اما برای اینکار راه حلی تونستم پیدا کنم {جستجو} :
1. شما 2 فرم ایجاد کنید form1 و form2 .
2. کنترل های خودتون رو در فرم 2 جاساز کنید و کد زیر را عینا وارد کلاس عمومی فرم 1 کنید :
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With Form2
AddHandler .Load, AddressOf form2_Load
.FormBorderStyle = Windows.Forms.FormBorderStyle.None
.ShowInTaskbar = False
.Show(Me)
End With
End Sub

Private Sub form2_Load(ByVal sender As Object, ByVal e As EventArgs)
With Form2
Dim rgn = New Region(Rectangle.Empty)
For Each ctrl As Control In .Controls
rgn.Union(ctrl.Bounds)
Next
.Region = rgn
End With
End Sub

Private Sub Form1_SizeOrLocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged, Me.Move, Me.Load
Dim p As Point = Me.PointToClient(Me.Location)
With Form2 'couple forms in XY direction
.Left = Me.Left - p.X
.Top = Me.Top - p.Y
.Size = Me.ClientSize
End With
End Sub

End Class
3. خاصیت Opacity فرم 1 رو به دلخواه تغییر بدید .
تمام کدهای شما باید در کنترل های فرم 2 ارجاع داده بشن به عنوان مثال برای یک دکمه در فرم 2 برای بستن فرم چنین می نویسیم :
Public Class Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form1.Close()
End Sub
End Class
کار رو سخت میکنه ولی نتیجه مناسب به دست میاد . دوستان راه حل بهتری سراغ دارند دریغ نکنند ، شاید من نمی دونم .
موفق باشید

zaeimh90
چهارشنبه 09 فروردین 1391, 20:53 عصر
عزیز عالی بود.ولی یه تیکه هاییشو متوجه نشدم.

Private Sub form2_Load(ByVal sender As Object, ByVal e As EventArgs)
With Form2
Dim rgn = New Region(Rectangle.Empty)
For Each ctrl As Control In .Controls
rgn.Union(ctrl.Bounds)
Next
.Region = rgn
End With
End Sub
اگر این تیکرو بهم بگی عالی میشه.
یه توضیح مختصر

mansour01
چهارشنبه 09 فروردین 1391, 23:09 عصر
عزیز عالی بود.ولی یه تیکه هاییشو متوجه نشدم.

Private Sub form2_Load(ByVal sender As Object, ByVal e As EventArgs)
With Form2
Dim rgn = New Region(Rectangle.Empty)
For Each ctrl As Control In .Controls
rgn.Union(ctrl.Bounds)
Next
.Region = rgn
End With
End Sub
اگر این تیکرو بهم بگی عالی میشه.
یه توضیح مختصر
درود
خوشحالم بدرد خورد ، گرچه کمی کد نویسی رو هم سخت میکنه ، ولی خب نتیجه شما ظاهرا فقط با همین کد جواب میده ، مگر اینکه دوستان راه حل جدیدی بدهند .
form2_Load ساب هست و میتونه هر چیز دیگری هم باشه ، مثلا salam23232 که باید در لود فرم 1 ما فراخونی بشه . و در حقیقت تمام کنترل های موجود در فرم 2 رو در فرم 1 ترسیم و لود میکنه . به عنوان مثال در فرم 2 یک دکمه (باتوم) ایجاد کنید و کد me.close() رو قرار بدید و برای امتحان چند کنترل دیگر هم در آن ترسیم کنید . چون ارث بری کنترل ها از فرم 2 هست با بسته شدن فرم 2 تمام کنترل ها هم بسته می شوند .
برای مطالعه بیشتر خصوصیت ctrl.Bounds به اینجا مراجعه کنید :

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bounds.aspx
موفق باشید