PDA

View Full Version : سوال: بدست آوردن Location یک کامپوننت



morteza271
سه شنبه 19 بهمن 1389, 10:12 صبح
سلام.

سوال من اینه:
من روی فرمم مثلا یه TextBox دارم (که امکان داره داخل یه پنل و اون پنل دخل یکی دیگه و یا هر چیز دیگه ای باشه) حالا میخوام Location اون تکست باکس رو بدست بیارم!
باید چیکار کنم؟
اگه کدشو برام بذارید ممنون میشم.

mahfeh
سه شنبه 19 بهمن 1389, 10:27 صبح
سلام
شما میتونین از خصوصیت left و Top اون شی استفاده کنین !
البته اگه در داخل پنل قرار گیری این مختصات نسبت به گوشه بالا سمت چپ پنل سنجیده میشود .
و هر چه پنل تو در تو باشد نسبت به داخلی ترین پنل سنجیده میشود .

موفق باشید .

ASKaffash
سه شنبه 19 بهمن 1389, 10:31 صبح
سلام
این کد را تست کن :


public static Point GetLocation(Control Control)
{
int y = 0, x = 0;
Control ControlParent = Control;
while (true)
{
y += ControlParent.Top;
x += ControlParent.Left;
if (ControlParent.Parent == null)
break;
ControlParent = ControlParent.Parent;
}
return new Point(x, y);
}

morteza271
سه شنبه 19 بهمن 1389, 10:49 صبح
سلام
این کد را تست کن :


public static Point GetLocation(Control Control)
{
int y = 0, x = 0;
Control ControlParent = Control;
while (true)
{
y += ControlParent.Top;
x += ControlParent.Left;
if (ControlParent.Parent == null)
break;
ControlParent = ControlParent.Parent;
}
return new Point(x, y);
}


ممنونم دوست عزیز.
خودمم یه همچین کدی نوشتم ولی به حای left و Top از x و Y استفاده کردم!
که همیشه درست نیست و کمی مشکل داره؟
دیگه چیزی به نظرتون نمیرسه؟!

ACorvinus
سه شنبه 19 بهمن 1389, 10:54 صبح
سلام.
اینم یه روش دیگه ای برای بدست آوردن Location یه کobject هستش.


Control[] Target = this.Controls.Find("TextBox3", true);
Point Location;
if (Target.Length > 0)
Location = ((TextBox)Target[0]).Location;

موفق باشی.

ACorvinus
سه شنبه 19 بهمن 1389, 11:08 صبح
رفیق کد فوق Location یه object رو نسبت به parent اون (در صورت وجود) برمیگردونه. اما این کد Location یه object رو نسبت به فرم محاسبه می کنه.


Control[] Target = this.Controls.Find("TextBox2", true);
Point Location;
if (Target.Length > 0)
{
Location = ((TextBox)Target[0]).Location;
if (((TextBox)Target[0]).Parent is GroupBox)
{
GroupBox gb = (GroupBox)((TextBox)Target[0]).Parent;
Location.X += gb.Location.X;
Location.Y += gb.Location.Y;
}
}

morteza271
سه شنبه 19 بهمن 1389, 13:44 عصر
ممنونم.ولی اینا همشون همون مشکل قبلی رو داره(یعنی همیشه درست نیست!)

نمیشه Location اون تکست باکس رو نسبت به دسکتاپ بدست بیاریم؟

ACorvinus
سه شنبه 19 بهمن 1389, 14:40 عصر
رفیق من نمیدونستم ممکنه Containerهای تودرتو داشته باشی.

برنامه رو دانلود کن حالشو ببر: 66093

morteza271
سه شنبه 19 بهمن 1389, 15:48 عصر
نه بازم بعضی وقتها مشکل داره و دقیق نیست!!!!!!:گریه:

ACorvinus
سه شنبه 19 بهمن 1389, 16:06 عصر
منظورت چیه بعضی وقتا مشکل داره. من در همه حالات چک کردم.
میشه اون بعضی حالت ها رو به ما هم بگی؟!!!

morteza271
سه شنبه 19 بهمن 1389, 16:31 عصر
من یه کامپوننت تاریخ شمسی (DatePicker ) ساختم که دادم به یکی داره استفاده میکنه!!!
حالا خبر داده که روی پروژه جدیدش Monthview درست زیر DatePicker باز نمیشه و یه خورده پایین تره!!!!
عکس های زیر رو ببینید :
66101
وقتی کلید رو میزنه باید فرم monthview دقیقا زیرش باز بشه مثل عکس زیر:
66100

ببینید روی سیستم خودم مشکلی نداره ولی دوستم که داره استفاده میکنه یه خورده پایین تر باز میشه!!!!