PDA

View Full Version : سوال: فرمهاي والد و فرزند



morteza271
سه شنبه 13 مهر 1389, 15:06 عصر
سلام دوستان.
يه سوال در مورد فرم هاي پدر رو فرزندتوي سي شارپ دارم....
من وقتي توي فرم خود كه به عنوان Parent هست فرم فرزند رو باز ميكنم اون فرم فرزند ميره زير كنترل هاي فرم Parent و ديه نميشه!!!
چيكار بايد بكنم؟؟؟
با تشكر...

flash118
سه شنبه 13 مهر 1389, 22:50 عصر
دوست عزیز در هنگام فراخوانی show dialog()فرم فرزندتون رو فراخوانی کنید البته فرم پدر شامل فرم فرزند هست با در نظر گرفتن این نکته میتونید مشکلتون رو حل کنید

morteza271
چهارشنبه 14 مهر 1389, 11:31 صبح
دوست عزیز در هنگام فراخوانی show dialog()فرم فرزندتون رو فراخوانی کنید البته فرم پدر شامل فرم فرزند هست با در نظر گرفتن این نکته میتونید مشکلتون رو حل کنید

ممنونم ولی وقتی با show.dialog() صدا میزنم خطای زمان اجرا میده و وقتی اجرا میکنم و دکمه مربوط به فرم فرزند رو میزنم خطا میده و از اجرا خارج میشه!!!
مشکلش چیه؟!

navidiran
چهارشنبه 14 مهر 1389, 13:30 عصر
کدتو بزار ببینیم چطوری داری فرم ها رو صدا می زنی

morteza271
جمعه 16 مهر 1389, 14:01 عصر
کدتو بزار ببینیم چطوری داری فرم ها رو صدا می زنی

اينم كد:


fclsChild frmChild = new fclsChild();
frmChild.Parent = this;
frmChild.show();

البته اگه با showdialog() صدا بزنم خطا ميده و ميگه نبايد فرزند باشه!!!
چكار كنم دوستان؟

ali.rezaei7
جمعه 16 مهر 1389, 14:54 عصر
دوست عزیز در هنگام فراخوانی show dialog()فرم فرزندتون رو فراخوانی کنید البته فرم پدر شامل فرم فرزند هست با در نظر گرفتن این نکته میتونید مشکلتون رو حل کنید

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

morteza271
شنبه 17 مهر 1389, 15:26 عصر
سلام
فرم های فرزندرو نمی شه بصورت ShowDialog باز کرد

ممنونم واقعا اینو خودم هم گفتم دوست عزیز!!!!!!!!!!!!!!!!!!!
کسی نیست بگه چرا فرم فرزند میره زیر کنترلهای فرم والد؟!!!
دوستان یکی لطف کنه جواب بده...ممنون میشم...

ali.rezaei7
شنبه 17 مهر 1389, 15:59 عصر
سلام من یه راه پیشنهاد می کنم:
در رویداد LocationChanged فرم فرزند، محل قرارگیری کنترل های فرم والد را با محل قرارگیری فرم فرزند را مقایسه کنید. بعد از مقایسه در صورتی که فرم فرزند روی یکی از کنترل های فرم والد قرارگرفته باشد می توانید Visible آن کنترل را False کنید تا به نظر برسد که کنترل زیر فرم قرار گرفته.
اما این روش نقص هایی هم دارد!!!

morteza271
شنبه 17 مهر 1389, 16:05 عصر
سلام من یه راه پیشنهاد می کنم:
در رویداد LocationChanged فرم فرزند، محل قرارگیری کنترل های فرم والد را با محل قرارگیری فرم فرزند را مقایسه کنید. بعد از مقایسه در صورتی که فرم فرزند روی یکی از کنترل های فرم والد قرارگرفته باشد می توانید Visible آن کنترل را False کنید تا به نظر برسد که کنترل زیر فرم قرار گرفته.
اما این روش نقص هایی هم دارد!!!

فکر نمیکنم این روش مناسبی باشه!!!
مظمئنا روشی داره، اگه دوستان لطف کنن و کمک کنن حتما روشی داره...
دوستان خواهشا...

ali.rezaei7
شنبه 17 مهر 1389, 16:15 عصر
فکر نمیکنم این روش مناسبی باشه!!!
مظمئنا روشی داره، اگه دوستان لطف کنن و کمک کنن حتما روشی داره...
دوستان خواهشا... تابع یا property وجود نداره که با فراخوانی آن بشه مشکلو برطرف کرد.
یه زمانی منم چنین مشکلی رو داشتم، ولی نتونستم راهی پیدا کنم. دلیلشم اینکه فرم های فرزند زیر مجموعه فرم والد و عناصر داخل اون هست، بخاطر همینم هست که زیر اونا قرار می گیره.

البته منم گفتم که روش من نقص داره، ولی بازم باید از همین نوع روش ها استفاده کنید.

mohsen_csharp
شنبه 17 مهر 1389, 18:17 عصر
قبلا بحث شده و این سوال جوابی نداره یعنی امکان پذیر نیست

morteza271
یک شنبه 18 مهر 1389, 09:30 صبح
قبلا بحث شده و این سوال جوابی نداره یعنی امکان پذیر نیست

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

mohsen_csharp
یک شنبه 18 مهر 1389, 23:56 عصر
ولی من برنامه های زیادی دیدم که ازین روش استفاده کردن و توی برنامشون از فرمهای والد و فرزند استفاده کردن...!!!
مطمئنا روشی هست وگرنه این فرم ها توی ویژوال گذاشته نمیشد!!!
من قبلا تو MSDN خوندم که این کار امکان پذیر نیست
یعنی نمیشه کاری کرد که فرم های فرزند روی کنترل های فرم والد قرار بگیره.
مثل خاصیت z-index برای combo تو ASP.NET که تو IE6 درست کار نمی کنه و تو MSDN خوندم که نمیشه یه combo زیر یه کنترل دیگه مثل button قرار بگیره.
حالا اگه شما دیدی که امکان پذیر هست به ما هم نشون بده.

navidiran
دوشنبه 19 مهر 1389, 09:16 صبح
اينم كد:


fclsChild frmChild = new fclsChild();
frmChild.Parent = this;
frmChild.show();

البته اگه با showdialog() صدا بزنم خطا ميده و ميگه نبايد فرزند باشه!!!
چكار كنم دوستان؟
Form frmChild = new fclsChild();
frmChild.showDialog();

mahboube
دوشنبه 19 مهر 1389, 10:35 صبح
اينطوريه فرمت مياد رو:


Form2 f2 = new Form2();
f2.MdiParent = this;
for (int i = 0; i < this.Controls.Count; i++)
this.Controls[i].SendToBack();
f2.Show();

mohsen_csharp
سه شنبه 20 مهر 1389, 08:38 صبح
اينطوريه فرمت مياد رو:


Form2 f2 = newForm2();
f2.MdiParent = this;
for (int i = 0; i < this.Controls.Count; i++)
this.Controls[i].SendToBack();
f2.Show();

سلام
دوست عزیز اول کدتونو تست کنید بعد بزارید اینجا
این کد جواب نمی ده
باز هم میگم امکان پذیر نیست

mahboube
سه شنبه 20 مهر 1389, 08:55 صبح
سلام
دوست عزیز اول کدتونو تست کنید بعد بزارید اینجا
این کد جواب نمی ده
باز هم میگم امکان پذیر نیست
آره درسته فرمو مياره رو ولي كنترلاي زيريشو پاك ميكنه.(من چك نكرده بودم)
ولي توي برنامه نويسي چيزي كه امكان پذيرنباشه وجود نداره!مخصوصا اين يكي كه اگه نشه خيلي مسخرس!
بگردي پيداميشه.

ctrl+alt+del
سه شنبه 20 مهر 1389, 10:15 صبح
ولی من برنامه های زیادی دیدم که ازین روش استفاده کردن و توی برنامشون از فرمهای والد و فرزند استفاده کردن...!!!
مطمئنا روشی هست وگرنه این فرم ها توی ویژوال گذاشته نمیشد!!!
اگه برای فرم والد خاصیت IsMdiContainer رو true کنی مشکلت حل میشه.

البته فرم والد باید در این حد باشه که یه منو داشته باشه و بقیه فرم مثل برنامه photoshop فقط محیطی واسه باز کردن فرم ها باشه.

روش صدا زدن فرم های child رو درست نوشته بودی

sheihaky
یک شنبه 27 شهریور 1390, 08:44 صبح
من حقیقتش همین مشکلو دارم و فعلا از این طریق حلش می کنم






fclsChild frmChild = new fclsChild();
frmChild.Parent = this;
frmChild.show();

this.Controls.SetChildIndex(frmChild, 1);
یا
frmChild.BringToFront();