PDA

View Full Version : سوال: بهترین روش ساخت برنامه های چند فرمی



md3848
پنج شنبه 07 شهریور 1398, 17:10 عصر
سلام - قصعا هر کی #C کار کرده باشه، پروژه هایی رو نوشته که چندین FORM داشته و بین فرم ها کاربر میتونه جابجا بشه.
برا ساخت اینجور برنامه ها روش هایی که من پیدا کردم ایناس :

1) هر فرمی، کد، اندازه و مشخصات خودشو داره، در هر فرم مثلا یک BUTTON میزاریم، تا بریم صفحه بعد، مشکل این روش اینه که اندازه و موقعیت نمایش صفحات با همدیگه متفاوت هستش - در حین جابجایی بیش صفحات خیلی چیز ضایعی میشه.
2) فرم پدر و بچه! : روال کار در لینک زیر : چند فرمی - فرم پدر (https://dazhyarco.net/آموزش-چند-فرمی-در-سی-شارپ-و-فرم-پدر/)
3) استفاده از panel، که هر صفحه از برنامه رو داخل یه panel قرار میدیم و تمام پنل ها روی همدیگه در یک FORM قرار میگیرند؛ سخت ترین روش به نظرم همینه، شیر تو شیر میشه این طور که! : توضیحات بیشتر در : چندین صفحه روی یک فرم به وسیله ی panel (http://www.program98.com/learn/ترفند-چندین-صفحه-روی-یک-فرم-به-وسیله-ی-panel/)

حالا خواستم ببینم روش دیگه هستش؟ بهترین روش و اصولی ترین روش چیه؟

md3848
جمعه 08 شهریور 1398, 00:31 صبح
خب روش 3 رو تست کردم - به نظر روش خوب و ساده ای میاد - ولی خب بازم مشکلی که من دارم - تو این روش وقتی بین صفحات سوییچ میکنم یه صحنه آهسته ای چیزی حس میشه، اطلاعات در آن واحد نمایش داده نمیشن، یه 0.3 ثانیه ای تاخیر داره - میشه حسش کرد - علت از چیه؟
اینم نمونه کد از این روش : http://s3.picofile.com/file/8370895650/MultiForm.rar.html

ویرایش شده برنامه توی لینک زیر هستش تقریبا :
http://hypersource.ir/post/113/تعین-یک-فرم-به-عنوان-فرم-والد-در-سی-شارپ-به-همراه--دانلود-پروژه-(نمایش-فرم-داخل-فرم-دیگر)
(http://hypersource.ir/post/113/تعین-یک-فرم-به-عنوان-فرم-والد-در-سی-شارپ-به-همراه--دانلود-پروژه-(نمایش-فرم-داخل-فرم-دیگر))
اینم کدش :
private void Form1_Load(object sender, EventArgs e){
Form2 frm = new Form2();
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.TopLevel = false;
panel1.Controls.Add(frm);
frm.Show();
}

peyman.kh
پنج شنبه 14 شهریور 1398, 02:43 صبح
.............

peyman.kh
پنج شنبه 14 شهریور 1398, 03:07 صبح
.................
//فرم را نشان بده
}

peyman.kh
پنج شنبه 14 شهریور 1398, 04:42 صبح
مگر سایز تمام فرم ها یکی باشه , اون موقع با ;()form2.ShowDiagnostic فرم دو رو جوری بالا بیاریم که فرم یک بره زیرش
راستی من با روش پنل اشنا نیستم , امکانش هست ی توضیحی بدین

prolog96
شنبه 25 تیر 1401, 23:33 عصر
سلام
من با این روش فرم هام را ساختم . اما مشکلی که دارم وقتی از فرم یک اطلاعات فرم دوم میخوام بفرستم برای دیتابیس ، فقط یک رکورد میزنه و اطلاعات فیلدها را همه صفر و فالس میاره.
باید چیکار کنم؟
لطفا راهنمایی کنید
ممنون

ROSTAM2
یک شنبه 26 تیر 1401, 08:22 صبح
سلام
من با این روش فرم هام را ساختم . اما مشکلی که دارم وقتی از فرم یک اطلاعات فرم دوم میخوام بفرستم برای دیتابیس ، فقط یک رکورد میزنه و اطلاعات فیلدها را همه صفر و فالس میاره.
باید چیکار کنم؟
لطفا راهنمایی کنید
ممنون

سلام.
کدهای فرم و فراخوانی فرم رو ارسال کن.

prolog96
یک شنبه 26 تیر 1401, 10:03 صبح
کدهام vb.net هست ایرادی نداره . اخه تو انجمن vb.net کسی نبود جوابم را بده.

Dim fo As New FrmDev
fo.TopLevel = False
PnlDev2.Controls.Clear()
PnlDev2.Controls.Add(fo)
fo.Show()
PnlDev2.Visible = True
fo.TxtBxSLea.Focus()
فرم دوم در فرم اول لود میشه . اما وقتی از فرم اول باتن را میزنیم که تکست و کامبو و چک باکس ها را بخونه و اطلاعات شون را برداره . همشون null میشه .
یه موردی هم که هست ، حتی فوکوس هم نمیکنه. (خط آخر کد بالا)
من اجبار دارم که فرمهام را به همین روش و یا روشی مشابه به فرم اصلی م بچسبونم . چون تعداد فیلدهام زیاده و نمیشه که همه را توی فرم اصلی بریزم . سنگین میشه و زمان لود زیاد میشه . نسبت به نیاز کاربر باید فرم مورد نظر لود بشه .

در فرم اول به این صورت تکس باکس هام را فراخوانی کردم:
Dim cf3 As FrmDev = New FrmDev()
Dim strPr As Decimal = cf3.TxtBxSPr.Text

ممنون میشم راهنمایی کنید.

ROSTAM2
یک شنبه 26 تیر 1401, 12:54 عصر
توی VB.net در صورتی که نیاز نباشه تعداد بیش از یک فرم داشته باشی، نیازی نیست فرم بصورت جدید تعریف بشه.
بهتر هست برای هر مقداری که از هرشی می خوای بگیری در خود فرم دوم خصوصیت (Property) بسازی که برای درخواست مقادیر فیلدها هم از همون خصوصیات استفاده کنی.

prolog96
یک شنبه 26 تیر 1401, 15:46 عصر
ممنون که راهنمایی کردید .
اما به چه صورتی این کار را انجام بدم.
امکانش هست یک نمونه کد برام بگذارید؟
ممنون
:قلب:

ROSTAM2
یک شنبه 26 تیر 1401, 17:21 عصر
ممنون که راهنمایی کردید .
اما به چه صورتی این کار را انجام بدم.
امکانش هست یک نمونه کد برام بگذارید؟
ممنون
:قلب:

از اونجایی که کدها VB.Net هستش تاپیک جدید ایجاد کردم:
https://barnamenevis.org/showthread.php?570910-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%81%D8%B1%D9%85-%D8%A8%D9%87-%DB%8C%DA%A9-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%DB%8C%D8%A7-%D8%B4%DB%8C%D8%A1-%D9%81%D8%B1%D8%B2%D9%86%D8%AF-%D9%88-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%A2%D9%86-%D8%AF%D8%B1-%DB%8C%DA%A9-Container-Control-%D9%85%D8%AB%D9%84-Panel&p=2452044#post2452044

prolog96
یک شنبه 26 تیر 1401, 17:57 عصر
ممنون زحمت کشیدید