ورود

View Full Version : پیدا کردن position یک کنترل روی frameنسبت به فرم



sarina
شنبه 23 دی 1385, 14:54 عصر
با سلام
اگر یک کنترل روی frame داشته باشیم Left و top آن را هم نسبت به Frame داریم
مشکلی که من دارم این است که این خصوصیات کنترل مورد نظر را نسبت به Form لازم دارم البته بدون استفاده از Leftو Top خود Frame
لطفا راهنمایی فرمایید

Neeloofar
شنبه 23 دی 1385, 21:54 عصر
با سلام
اگر یک کنترل روی frame داشته باشیم Left و top آن را هم نسبت به Frame داریم
مشکلی که من دارم این است که این خصوصیات کنترل مورد نظر را نسبت به Form لازم دارم البته بدون استفاده از Leftو Top خود Frame
لطفا راهنمایی فرمایید

خب بدون استفاده از اینا نمیشه!

sarina
یک شنبه 24 دی 1385, 08:31 صبح
من دنبال راهی ام که بشه
اگه ممکنه کمک کنید

Neeloofar
یک شنبه 24 دی 1385, 11:20 صبح
من دنبال راهی ام که بشه
اگه ممکنه کمک کنید

وقتی که Top و Left فریوم رو داری چه کاری که دنبال راهی بگردی! مشکل مگه چیه؟

اگه میخوای مختصات رو نسبت به یک پنجره بالاتر بدست بیاری باید اول مختصات پنجره پایینتر رو بدست بیاری.(اصل ویندوز اینطوریه)

sarina
یک شنبه 24 دی 1385, 22:53 عصر
ببینید من تابعی نوشتم که ورودی اون یک کنترله مثلا textBox ؛ این تابع Publice و باید در هر فرمی که لازمه اجرا بشه داخل این تابع من left و Top این کنترل رو لازم دارم (نسبت به Screen) حالا اگه این کنترل روی فرم باشه با استفاده از پوزیشن خودش و Parent آن می تونیم این کار رو انجام بدیم
حالا مشکل زمانی پیدا میشه که این کنترل روی فرم نباشه و روی فریوم باشه حالا دیگه کار آسون نیست چرا که ما نمیتونی Left وTop این کنترل نسبت به فرم رو هم داشته باشیم و فقط نسبت به فریوم داریم
در ضمن من نمیخوام ورودیه من در این تابع به غیر از کنترل باشه
به نظر شما ممکنه راهی باشه ؟

Neeloofar
دوشنبه 25 دی 1385, 00:29 صبح
حالا این شد.

ببینید از شی Container استفاده کنید. Container در واقع همون Frame یا pictureBox و ... هست. من یک تابع نوشتم که فقط یک آبجکت رو میگیره و XY اونو نسبت به Screen بر حسب Twip برمیگردونه.
این تابع

Public Sub GetXY(obj As Object, x As Single, y As Single)
x = obj.Container.Left + obj.Left
x = x + obj.Parent.Left
y = obj.Container.Top + obj.Top
y = y + obj.Parent.Top
End Sub

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


Dim x As Single, y As Single
GetXY Text1, x, y
MsgBox x & ", " & y

البته این تابع در صورتی استفاده میشه که فقط یک فریوم باشه. اگه یک کنترل در فریومهای تو در تو قرار داشته باشه باید با استفاده از یک حلقه مختصات تمامی فریومهای رو بدست بیاریم. (باز هم دراین حالت لازم نیست مختصات فریومها رو به تابع منعکس کنید)

موفق باشید!

sarina
دوشنبه 25 دی 1385, 17:47 عصر
ممنونم نیلوفر خانم درست شد

amirsadeghi
چهارشنبه 27 دی 1385, 23:41 عصر
شما به راحتی می تونی top و left کنترل داخل فریم رو باtop و left خود فریم جمع کنی جواب میگیری