آژانس هواپیماییexchanging

Arrange

شروع موضوع توسط hamid_80386 ‏4 مارس 2010 در انجمن Visual Basic 6

  1. hamid_80386

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    سلام

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

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

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

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

    [​IMG]

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

    [​IMG]

    کسی راه حلی برای رفع این مشکل داره؟
     
  2. >-->O

    >-->O همکار برنامه نویسی و بازارچه همکار انجمن

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

    مثال :

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

    hamid_80386 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    46
    تشکر شده:
    0
    دوست عزیز این برای فرم مادری که تعداد زیادی CHILD FORM داره، روش مناسبی نیست،

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

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

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

    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
    
    البته اینی که گفتم یه پیش طرح بودا !