PDA

View Full Version : تنظیم محل نمایش فرم با توجه به مکان یک کنترل در یک user control



mina.net
چهارشنبه 05 فروردین 1388, 12:20 عصر
سلام دوستان ، سال نو مبارک
من یک کنترل datetimepicker فارسی ساختم که شبیه یک کامبوباکس هست و وقتی روش کلیک می کنی یک فرم که حاوی تقویم هست باز می شه و کار بر تاریخ مورد نظرش رو انتخاب می کنه.
من می خوام فرم جدید که حاوی تقویم هست دقیقا زیر کنترل قبلی باز بشه. در حالت عادی فرض کنید دو تا فرم داریم فرم جدید باید دقیقا زیر یک کنترل از فرم فعلی باز بشه طوری نمایش پیدا کنه مثل اینکه از داخل کنترل باز شده.

anooshiran
چهارشنبه 05 فروردین 1388, 12:53 عصر
با سلام





Protected Overrides Sub OnDropDown(ByVal eventargs As EventArgs)
Dim X, Y As Integer
If Me.Parent.RightToLeft Then
X = Me.Parent.PointToScreen(Me.Location).X
Else
X = Me.Parent.PointToScreen(Me.Location).X
End If
Y = Me.Parent.PointToScreen(Me.Location).Y + Me.Height
AddHandler YourControl.Deactivate, AddressOf DeactiveHandler
Dim _val As String = Me.EditingControlFormattedValue
YourControl._X = X
YourControl._Y = Y
YourControl.Show()
MyBase.OnDropDown(eventargs)
End Sub
Private Sub DeactiveHandler(ByVal sender As Object, ByVal e As EventArgs)
Dim cellvalue = CStr(Val(YourControl.Text))
YourControl.Text = ""
If cellvalue = 0 Then cellvalue = ""
DirectCast(sender, Form).Dispose()
Me.YourControl.Text = cellvalue
Me.EditingControlFormattedValue = cellvalue
End Sub



كد هاي فوق را به class ي كه براي datetimepeaker نوشتي و در قسمتي كه combobox را inherits مي كني اضافه كن. توجه كن yourcontrol همان نام فرمي است كه datetimepeaker را ساخته اي

امتحان كن اگر به مشكلي خوردي كد هات رو برام بفرست تا حلش كنم

mina.net
چهارشنبه 05 فروردین 1388, 16:27 عصر
امتحان كن اگر به مشكلي خوردي كد هات رو برام بفرست تا حلش كنم

سلام دوست عزیز
من نتونستم از کد شما استفاده کنم.
از انجای که دوستان کمی به من در ساخت datetimepicker کمک می کنن و موضوع رو به صورت جدی دنبال نمی کنن من سورس برنامه رو برای شما ایمیل کردم. امیدوارم منو ببخشین. به ایمیلی که جلوی اسم شما نوشته فرستادم امیدوارم درست باشه.

rooshan2008
چهارشنبه 05 فروردین 1388, 16:53 عصر
سلام
دوست عزیز
این تابع رو ببین،
مختصات کنترول مورد نظر از ابتدای صفحه نمایش رو بر میگردونه، من خودم از این کد که نوشتم استفاده میکنم ....



Public Function GetLocation(ByVal obj As Object) As Point
Dim P As New Point
While Not IsNothing(obj)
P.X += obj.Location.x
P.Y += obj.Location.y
obj = obj.parent
End While

Return P
End Function


نحوه فراخونیش اینجوری :

Form2.Show()
Form2.Location = GetLocation(Button1)

anooshiran
چهارشنبه 05 فروردین 1388, 19:29 عصر
سلام دوست عزيز

مشكلت رو حل كردم و برات ايميل كردم. باز هم تگر موردي بود در خدمت هستم

mostafaaa
چهارشنبه 05 فروردین 1388, 19:29 عصر
سلام دوستان من

این تابع رو ببین،
مختصات کنترول مورد نظر از ابتدای صفحه نمایش رو بر میگردونه، من خودم از این کد که نوشتم استفاده میکنم ....
چه کاری روشن جان !!
تابع شما رو میشد به این شکل نوشت :

Public Function GetLocation(ByVal Ctrl As Control) As Point
Return PointToScreen(Ctrl.Location)
End Function
یا علی

rooshan2008
چهارشنبه 05 فروردین 1388, 20:03 عصر
سلام
ممنون مصطفی جان که اشتباهم رو گوشزد کردین :لبخندساده:

اون تابع رو اصلاً ندیدم

mina.net
پنج شنبه 06 فروردین 1388, 12:54 عصر
سلام دوستان
جناب anooshiran ممنون از ویرایشی که در برنامه انجام دادید . من برنامه ای رو که شما ویرایش کردید رو به عنوان آخرین ویرایش این برنامه به نام شما در تاپیکی که از قبل داشتم قرار دادم بازم ممنون از شما و دوستان خوبم جناب mostafaaa , جناب روشنفکر.
من خوب واقفم که کنترلی که ساختم در اول راه قرار داره همان طور که من در برنامه نویسی اول را هستم و از دوستان می خوام همانطور که تا اینجا به من کمک کردن در ادامه نیز کمک من باشند تا برنامه تکمیل شود.
من سورس برنامه رو برای جناب روشنفکر میل کردم از ایمیلی که در پروفیل شما بود استفاده کردم اما هر چه گشتم ایمیل جناب mostafaaa رو ندیدم. اگه ایمیل شما رو داشته باشم سورس رو برای شما هم می فرستم تا از نظرات سازنده شما بیشتر بهرمند گردیم.