PDA

View Full Version : مشکل در نمایش فرم در mdiparent



teymoorei
پنج شنبه 03 آذر 1401, 20:29 عصر
سلام
من یه فرم دارم که وقتی توی mdiparent باز میشه باید اسکرول بشه تا تمام فرم رو ببینم در حالی که فضا داره که نیاز به اسکرول نباشه ، StartPosition رو هم روی هر حالتی میذارم باز هم همین مشکل هست .
توی تصویر زیر مشخصه :
154261

ممنون میشم راهنمایی بفرمایید

336699
پنج شنبه 03 آذر 1401, 22:22 عصر
سلام

WindowState را روی Maximized قرار بده

154262

teymoorei
جمعه 04 آذر 1401, 08:12 صبح
سلام
ممنونم از توجه تون تاحدودی درست شد اما چند تا مساله هست که توی تصویر مشخص کردم .

1- مشکل نمایش سه کلید minimize , restore و close هست در حالی که من نمیخوام این کلید ها نمایش داده بشه .
2- با وجود راه حل شما باز هم فرم به درستی باز نمیشه و مقداری از فرم هنوز پایین تر از فرم mdiform هست .
3- برای درست شدن کامل باید کلید restore رو بزنم تا مشکل کامل بر طرف بشه .

154263

336699
جمعه 04 آذر 1401, 10:10 صبح
FormBorderStyle را روی None قرار بده

154264

teymoorei
جمعه 04 آذر 1401, 10:37 صبح
روی none هست و این مشکل وجود داره

336699
جمعه 04 آذر 1401, 11:36 صبح
کدهای مربوط به نمایش فرم را بصورت کامل ارسال نمایید.

teymoorei
جمعه 04 آذر 1401, 11:38 صبح
کد های مربوط به فرم کجاست ؟

336699
جمعه 04 آذر 1401, 18:07 عصر
شما یکسری کد نوشتین تا "فرم ثبت خروج بار" باز شود

همان کدها را ارسال نمایید

teymoorei
جمعه 04 آذر 1401, 19:38 عصر
خدمت شما :

frmOutConsignment.MdiParent = Me
frmOutConsignment.Show()

336699
جمعه 04 آذر 1401, 20:05 عصر
شما فرض کن یک فرم داریم و میخواهیم فرم را داخل یک پنل نمایش بدهیم.

Dim frm As Form2 = New Form2
frm.TopLevel = False
frm.FormBorderStyle = FormBorderStyle.None
frm.Dock = DockStyle.Fill
Panel1.Controls.Add(frm)
frm.Show()

teymoorei
جمعه 04 آذر 1401, 20:38 عصر
شما فرض کن یک فرم داریم و میخواهیم فرم را داخل یک پنل نمایش بدهیم.

Dim frm As Form2 = New Form2
frm.TopLevel = False
frm.FormBorderStyle = FormBorderStyle.None
frm.Dock = DockStyle.Fill
Panel1.Controls.Add(frm)
frm.Show()

هیچ فرقی نکرد هنوز هموطوری باز میشه

336699
جمعه 04 آذر 1401, 21:01 عصر
هیچ فرقی نکرد هنوز هموطوری باز میشه

اون قسمت خاکستری رنگ چی هستش؟ پنل هستش یا؟

teymoorei
جمعه 04 آذر 1401, 21:20 عصر
سلام فرم mdiparent

336699
جمعه 04 آذر 1401, 21:57 عصر
با همین کد تست کردم تمام صفحه فرم را نمایش میده.

Dim frm2 As Form = New Form2()
frm2.MdiParent = Me
frm2.Dock = DockStyle.Fill
frm2.FormBorderStyle = FormBorderStyle.None
frm2.Show()

teymoorei
جمعه 04 آذر 1401, 22:29 عصر
سلام
ممنونم از لطف و پیگیری شما

اگه با کد ی که شما دادید و windowsstate = maximaize بشکل زیر نمایش میده :

154273

336699
جمعه 04 آذر 1401, 22:37 عصر
الان مشکل در طراحی همین فرم هستش

با استفاده از Anchor برای هریک از کنترل های روی فرم میتوانید تعیین کنید که وقتی فرم تغییر سایز پیدا کرد کدوم سمت قرار بگیرند.

154274

336699
جمعه 04 آذر 1401, 22:45 عصر
شما این ویدیو آموزشی را نگاه کنید.


https://freebies.faradars.org/video/fvvb9409/720/fvvb9409_01_trial.mp4

teymoorei
شنبه 05 آذر 1401, 10:06 صبح
من نیاز به anchor ندارم و فقط میخوام زمان باز شدن فرم در درون فرم mdiparent در بالا ترین حالت ممکن باز بشه همین.

336699
شنبه 05 آذر 1401, 11:13 صبح
اون قسمت سفید رنگ هم در واقع ادامه فرم ثبت خروج بار هستش که خالی مونده

شما باید فرم را طوری طراحی بکنید که با افزایش و یا کاهش ابعاد فرم، کنترل های موجود در فرم هم متناسب با اون جابجا بشن و تغییر سایز پیدا کنن تا این مشکل پیش نیاد

154275

336699
شنبه 05 آذر 1401, 11:53 صبح
شما این فرم نمونه رو تست کن
با تغییر سایز فرم کنترلها جابجا و تغییر سایز میدن

154276

teymoorei
شنبه 05 آذر 1401, 12:20 عصر
اون قسمت سفید رنگ هم در واقع ادامه فرم ثبت خروج بار هستش که خالی مونده

شما باید فرم را طوری طراحی بکنید که با افزایش و یا کاهش ابعاد فرم، کنترل های موجود در فرم هم متناسب با اون جابجا بشن و تغییر سایز پیدا کنن تا این مشکل پیش نیاد

154275


سلام مجدد ممنونم از لطف و وقتی که میذارید

اما من نمیخوام فرمم تغییر سایز داشته باشه .

فقط میخوام یه مقدار بالا تر نمایش داده بشه

تصویر زیر گویای منطورم هست :

154278

336699
شنبه 05 آذر 1401, 13:13 عصر
در این صورت StartPosition بصورت Manual باشد و WindowState هم باید Normal باشد.

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

Dim frm2 As Form = New Form2()
frm2.MdiParent = Me
frm2.Dock = DockStyle.None
frm2.FormBorderStyle = FormBorderStyle.None
frm2.WindowState = FormWindowState.Normal
frm2.StartPosition = FormStartPosition.Manual
Dim x As Integer = (Me.Width - frm2.Width) \ 2
frm2.Location = New Point(x, 0)
frm2.Show()

teymoorei
شنبه 05 آذر 1401, 17:30 عصر
سلام هیچ فرقی نکرد و جالبه که عدد هم میدم یا هر تغییری انجام میدم بازم فرقی نمیکنه توی نحوه ی نمایش فرم

336699
شنبه 05 آذر 1401, 17:36 عصر
یک اسکرین شات از کدهایی که نوشتین بفرستین

teymoorei
شنبه 05 آذر 1401, 17:41 عصر
سلام
تصویر پایین اسکرین شات میباشد :

154279

ROSTAM2
شنبه 05 آذر 1401, 18:18 عصر
سلام.



قبل از هرچیز باید برای اشیاء فرم یک Panel داشته باشیم.
خصوصیت aNCHOR از pANEL رو برابر None می کنیم:
154280
Panel رو انتخاب و از نوار ابزار Layout کلید Center Horizontally را می کلیکیم.
154281
154282


حالا با آسایش خاطر می توان ابعاد فرم را تغییر دهیم و اشیاء در وسط و بالای فرم باقی می ماند. :لبخندساده:

teymoorei
شنبه 05 آذر 1401, 18:31 عصر
سلام

:عصبانی++:

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

ROSTAM2
شنبه 05 آذر 1401, 18:39 عصر
سلام

:عصبانی++:

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

بهتره همیشه در حالت Maximized نگهش داری. Child Form رو می گم.

336699
شنبه 05 آذر 1401, 18:42 عصر
سلام
تصویر پایین اسکرین شات میباشد :

154279

اون پنل کجاست که مخفی کردین در ابتدای کد؟

teymoorei
شنبه 05 آذر 1401, 18:55 عصر
اون پنل کجاست که مخفی کردین در ابتدای کد؟

اون پنل چیز خاصی نیست .

یه پنله که دو تا کلید روش دارم که وقتی فرم باز میشه اون پنا visible اش false میشه

336699
شنبه 05 آذر 1401, 19:19 عصر
فرم mdi خیلی داغونه

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

teymoorei
شنبه 05 آذر 1401, 19:26 عصر
یعنی که فرم معمولی بجای mdi بذارم و داخل فرم یه فرم دیگه باز کنم ؟

336699
شنبه 05 آذر 1401, 21:24 عصر
به پست بعدی مراجعه شود.

336699
شنبه 05 آذر 1401, 21:25 عصر
ابتدا در فرم اصلی isMdiContainer را غیر فعال کنید

154283


سپس یک پنل به فرم اصلی اضافه کنید و Dock پنل را روی حالت Fill قرار دهید

154284

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

Dim frm As Form = New Form1()
frm.TopLevel = False
frm.FormBorderStyle = FormBorderStyle.None
frm.Dock = DockStyle.Fill
Panel1.Controls.Add(frm)
frm.Show()

336699
شنبه 05 آذر 1401, 21:34 عصر
البته کد بالا برای حالت تمام صفحه هستش

با کد زیر میتوان فرم را در وسط و متصل به بالای صفحه نمایش داد

Dim frm As Form = New Form1()
frm.TopLevel = False
frm.Dock = DockStyle.None
frm.FormBorderStyle = FormBorderStyle.None
frm.WindowState = FormWindowState.Normal
frm.StartPosition = FormStartPosition.Manual
Dim x As Integer = (Panel1.Width - frm.Width) \ 2
frm.Location = New Point(x, 0)
Panel1.Controls.Add(frm)
frm.Show()

teymoorei
یک شنبه 06 آذر 1401, 03:13 صبح
سلام
ممنونم از لطف تون
آموزش جالبی بود بعد این همه سال فکر نمیکردم با یه Panel بشه همچین کاری کرد .
اما چند نکته :
1- هنوز هم فاصله کمی از فرم فرزند تا بالای فرم اصلی ایجاد میشه (البته تو یه پروژه دیگه امتحان کردم درست کارکرد) :
اینم تصویرش :
154285

2- جالبه دو تا فرم رو درست باز کرد اما یه فرمم رو میبره زیر منو باز میکنه تمام تنظیمات و کد ها هم شبیه همه .
اینم تصویر فرم :
154286

3- من یه StatusStrip دارم زمانی که WindowState رو روی Maximaize میذارم ، StatusStrip رو نمایش نمیده البته اگه پنجره رو کوچک تر کنم نمایش میده یعنی در حالت عادی میره زیر TaskBar .

336699
یک شنبه 06 آذر 1401, 09:57 صبح
یک مورد هم برای جلوگیری از دوبار بازشدن فرم هستش

ابتدا بررسی میکنیم اگر فرم باز بود، دوباره فرم را باز نکند.

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


For Each f As Form In Application.OpenForms
If f.GetType() = GetType(Form1) Then
f.Activate()
Return
End If
Next

Dim frm As Form = New Form1()
frm.TopLevel = False
frm.Dock = DockStyle.None
frm.FormBorderStyle = FormBorderStyle.None
frm.WindowState = FormWindowState.Normal
frm.StartPosition = FormStartPosition.Manual
Dim x As Integer = (Panel1.Width - frm.Width) \ 2
frm.Location = New Point(x, 0)
Panel1.Controls.Add(frm)
frm.Show()

teymoorei
یک شنبه 06 آذر 1401, 11:56 صبح
سلام
ممنونم از لطف تون
آموزش جالبی بود بعد این همه سال فکر نمیکردم با یه Panel بشه همچین کاری کرد .
اما چند نکته :
1- هنوز هم فاصله کمی از فرم فرزند تا بالای فرم اصلی ایجاد میشه (البته تو یه پروژه دیگه امتحان کردم درست کارکرد) :
اینم تصویرش :
154285

2- جالبه دو تا فرم رو درست باز کرد اما یه فرمم رو میبره زیر منو باز میکنه تمام تنظیمات و کد ها هم شبیه همه .
اینم تصویر فرم :
154286

3- من یه StatusStrip دارم زمانی که WindowState رو روی Maximaize میذارم ، StatusStrip رو نمایش نمیده البته اگه پنجره رو کوچک تر کنم نمایش میده یعنی در حالت عادی میره زیر TaskBar .


ممنونم اگه میشه مشکلات من رو بررسی بفرمایید .
ممکنه این سوالات مشکل خیلی از دوستان رو بر طرف کنه

336699
یک شنبه 06 آذر 1401, 12:03 عصر
ممنونم اگه میشه مشکلات من رو بررسی بفرمایید .
ممکنه این سوالات مشکل خیلی از دوستان رو بر طرف کنه

همانطور خودتان هم اعلام کردین، در یک پروژه دیگه به درستی کار میکنه

یک راهش اینه که شما درصورت تمایل پروژه رو ارسال کنید ببینیم مشکل از کجاست، چون از طریق اسکرین شات هیچ کمکی نمیشه کرد.

teymoorei
یک شنبه 06 آذر 1401, 12:22 عصر
سلام
پیام خصوصی ارسال نمیشه
اگه ممکنه یه ایمیل بدید تا پروژه رو ارسال کنم

teymoorei
سه شنبه 08 آذر 1401, 11:28 صبح
دوستان اگه ممکنه راهنمایی بفرمایید