برگزیده های پرشین تولز

Arrange

hamid_80386

Registered User
تاریخ عضویت
28 فوریه 2007
نوشته‌ها
46
لایک‌ها
0
سلام

یه مشکلی که در وی بی وجود دارد این است که فرم ها رو بصورت کاملاً Arrange نشون نمیده.

به این مثال توجه کنید:

ما یک MDI Form داریم و سه Child Form

وقتی برای بار اول سه تا Child Form را باز میکنیم، آنها بصورت کاملاً مرتب نمایش داده میشوند، فرم اول در موقعیت x=0 و y=0 فرم مادر نمایش داده میشه، در فرم دوم مثلا 100 تا به X و Y اضافه میشه و بهمین ترتیب:

1267738705.gif


اما وقتی هر سه تا فرم را میبندیم، و دوباره بازشان میکنیم، یه فضای خالی ایجاد میشود، یعنی نمایش فرم ها از موقیعت X=0 و Y=0 شروع نمیشود:

1267726013.gif


کسی راه حلی برای رفع این مشکل داره؟
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
شما باید خواص Left و Top فرم هاتون رو در رویداد Form_load یا هر روال دیگه ای که قراره فرم هاتون رو نمایش بدید مشخص کنید .

مثال :

PHP:
Private Sub MDIForm_Load()
Form1.Top = 60
Form1.Left = 30
Form1.Show
End Sub
 

hamid_80386

Registered User
تاریخ عضویت
28 فوریه 2007
نوشته‌ها
46
لایک‌ها
0
شما باید خواص Left و Top فرم هاتون رو در رویداد Form_load یا هر روال دیگه ای که قراره فرم هاتون رو نمایش بدید مشخص کنید .

مثال :

PHP:
Private Sub MDIForm_Load()
Form1.Top = 60
Form1.Left = 30
Form1.Show
End Sub

دوست عزیز این برای فرم مادری که تعداد زیادی CHILD FORM داره، روش مناسبی نیست،

فرضاً اگه کاربر در اولین اقدام بجای Form1 بیآد و فرم 25 رو باز کنه، اونوقت فرم باز شده بجای اینکه در حالت استاندارد عین برنامه های دیگه تو موقیت x=0 , y=0 نمایش داده بشه، مثلاً تو X=1500 , y=750 نمایش داده میشه، که این حالت خوشایندی نداره!

باید یه فکر اساسی کرد، یه پروسیجر مرتب سازی خوب میخواد!

اما در کل اگه راهی وجود داشت تا بشه این مشکل ذاتی ویژوال بیسیک رو بر طرف کرد، بهتر بود.
 

hamid_80386

Registered User
تاریخ عضویت
28 فوریه 2007
نوشته‌ها
46
لایک‌ها
0
در واقع در انتها به این نتیجه رسیدم که از یه آرایه دو بعدی استفاده کنم

من حدود 25 فرم در فرم مادر دارم

میتونم صفحه نمایش رو به یه جدول 5*5 تقسیم کنم، یعنی در واقع یه آرایه 5*5 بسازم از نوع بولیئن با مقدار پیش فرض false و هر وقت که یه فرم باز میشه یکی از خونه های اون true بشه و اون خونه ای که true شده در متغیر های Public اون فرم که مقدار x , y اون خونه از آرایه رو نگه میداره تعریف شه.

مثلاً اگه قبلاً دو تا فرم باز کردیم و حالا میخواهیم سومین فرم باز میشه:

کد:
Form3.X=1
Form3.Y=3
Array(1,3)=true
Form3.left=X*1000
Form3.Top=Y*500
Form3.Visible=True

و وقتی سومین فرم بسته میشه

کد:
Array(1,3)=False
Form3.Visible=false

و در کل وقتی فرمی میخواد باز شه، توی آرایه میگردیم و اولین جای خالی یا اولین خونه ای رو که False هست رو پیدا میکنیم و position فرم رو به اون اختصاص میدیم:

کد:
For i=1 to 5
   For j= 1 to 5
      if array(i,j)=false then
         ChidForm.left=i*1000
         ChildForm.left=j*500
         ChildForm.X=i
         ChildForm.Y=j
      End if
   next j
next i

البته اینی که گفتم یه پیش طرح بودا !
 
بالا