PDA

View Full Version : سوال: نحوه نگراش کلاس اختصاصی برای فرم های برنامه



bzdesign
چهارشنبه 11 مرداد 1391, 14:53 عصر
با سلام خدمت اساتید.
یک مسئله ای ذهنم رو مشغول کرده ،چون قبلا پاسخش رو میدونستم ولی الان هرچی فکر میکنم یادم نمیاد. و اونم نوشتن کلاس اختصاصی برای اشیاء در VB بود.
به زبون ساده :
ما یه برنامه داریم که 30 تا فرم داره و در این برنامه تمامی فرم های ما باید دارای خصوصیت های زیر باشند
1) خاصیت TopMost=False
2) خاصیت ShowIcon=True
3) خاصیت ControlBox=False
4) خاصیت Size=520*333

خب در این شرایط، اولین راهکار اینه که بیایم هر بار که یک New Form ایجاد میکنم بریم تو خاصیت هاش و این مقادیر ذکر شده رو براش تنظیم کنیم. ولی مطمئنا این راه غیر مهندسی ترین راه حل هست.
برای حل این مشکل بنده یادم هست که میومدیم یک کلاس ایجاد میکردیم. درون اون کلاس که از نوع فرم بود یکبار تمامی خواصش رو مطابق میلمون تنظیم میکردیم و بعد هر بار که تو برنامه New Form میساختیم، درون فرم جدید از اون کلاس فرم اختصاصی ای که نوشته بودیم ارث بری میکردیم.
از اساتیدی که منظور بنده رو متوجه شدن میشه خواهش کنم یک نمونه عملی از این پروژه رو ایجاد کنن ؟ بسیار ممنون میشم از دوستان اگه کمک بفرمایند

M.KH-SH
چهارشنبه 11 مرداد 1391, 15:10 عصر
خلاصه همون چیزی که خودت میخوای رو مینویسم

public sub control_form (form_name as form)
form_name.TopMost=False
form_name.ShowIcon=True
form_name.ControlBox=False
form_name.Size=520*333
end sub


خوب این تابع رو در یک کلاس بریز فرقی نمیکنه کلاس باشه یا ماژول فقط یک جا عمومی بریز

حالا فقط تو هر فرم لود تنها اینو بنویس::::


control_form(me)

مشکلی بود در خدمت هستم

مهرداد صفا
چهارشنبه 11 مرداد 1391, 17:39 عصر
با سلام خدمت اساتید.
یک مسئله ای ذهنم رو مشغول کرده ،چون قبلا پاسخش رو میدونستم ولی الان هرچی فکر میکنم یادم نمیاد. و اونم نوشتن کلاس اختصاصی برای اشیاء در VB بود.
به زبون ساده :
ما یه برنامه داریم که 30 تا فرم داره و در این برنامه تمامی فرم های ما باید دارای خصوصیت های زیر باشند
1) خاصیت TopMost=False
2) خاصیت ShowIcon=True
3) خاصیت ControlBox=False
4) خاصیت Size=520*333

خب در این شرایط، اولین راهکار اینه که بیایم هر بار که یک New Form ایجاد میکنم بریم تو خاصیت هاش و این مقادیر ذکر شده رو براش تنظیم کنیم. ولی مطمئنا این راه غیر مهندسی ترین راه حل هست.
برای حل این مشکل بنده یادم هست که میومدیم یک کلاس ایجاد میکردیم. درون اون کلاس که از نوع فرم بود یکبار تمامی خواصش رو مطابق میلمون تنظیم میکردیم و بعد هر بار که تو برنامه New Form میساختیم، درون فرم جدید از اون کلاس فرم اختصاصی ای که نوشته بودیم ارث بری میکردیم.
از اساتیدی که منظور بنده رو متوجه شدن میشه خواهش کنم یک نمونه عملی از این پروژه رو ایجاد کنن ؟ بسیار ممنون میشم از دوستان اگه کمک بفرمایند
سلام
میتوانید ابتدا یک کلاس تعریف کرده و از کلاس System.Windows.Forms.Form ارث ببرید و خصوصیات را به میل خودتان ایجاد یا مقداری دهی کنید. برای استفاده کافیست اشیا را از این کلاس بسازید. مثلا:

'in the name of god
Class MyForm
Inherits System.Windows.Forms.Form
Sub New()
me.TopMost = False
Me.ShowIcon = True
Me.ControlBox = False
Me.Size = New System.Drawing.Size(520, 330)
End Sub
End Class

Public Class Form1
Dim MyForms(29) As MyForm
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For i = 1 To 29
MyForms(i) = New MyForm()
MyForms(i).Text = "My form " & i
Next
End Sub
End Class

موفق باشید.

alimanam
چهارشنبه 11 مرداد 1391, 17:46 عصر
با سلام


خوب این تابع رو در یک کلاس بریز فرقی نمیکنه کلاس باشه یا ماژول فقط یک جا عمومی بریز

فکر نمیکنم منظور دوستمون این بوده باشه ! چون اینجوری عملاً مد Design رو از برنامه نویس میگیرین وباید برای هر کنترل چندین خط بنویسه تا به فرم اضافه بشه !

شما برای این کار در پروژه خودتون راست کلیک کنید , و گزینه Add و بعد گزینه Component رو انتخاب کنید . زیر نام کلاس کد زیر رو بنویسین

Inherits System.Windows.Forms.Form

با اینکار به کامپایلر اعلام میکنین که کنترل شما از یک فرم ویندوز به ارث برده میشه .

کدهای دلخواهی که میخواین رو در تابع InitializeComponent بنویسین . و یک بار پروژه رو Build کنین . خوب کار تمام شد ! حالا هر وقت یک فرم جدید ساختین به راحتی میتونین به فرمی که قبلاً ساختین و مطابق نظر شماست نسبتش بدین با کد زیر که حتماً بلدینش :

Inherits myCustomForm

وقتی به محیط Design برگردین مشاهده میکنین که تمامی مشخصاتی که برای اون فرم سفارشی در نظر گرفتین برای این فرم به ارث برده شده است .

موفق باشید./

bzdesign
شنبه 14 مرداد 1391, 10:27 صبح
با تشکر از تمامی دوستان. نمیتونم بگم پاسخ هیچکدومتون اشتباه بود. چون هر کدوم به نوعی قابل پیاده سازی هستن و مفید !
ولی منظور بنده دقیقا همون پاسخی بود که جناب alimanam دادند.
منتها اگر لطف کنند و یک نمونه ساده عملی از فرمایششون قرار بدند که دیگه نور علی نور میشه !
من خودم اینکار رور انجام دادم. همه چیز درسته و در هنگام run تمامی تغییرات اعمال میشه. منها در مود design اصلا این تغییرات قابل رویت نیست. فکر میکنید اشکال از کجاست ؟ حتی پس از build مجدد و بستن و باز کردن مجدد پروژه با اینکه تغییرات در نتیجه ی کار اعمال میشوند ولی در حالت design قابل روئیت نیستند.
بسیار متشکرم جهت پاسخ گویی دوستان و شرکت در این تاپیک.:قلب:
بسیار عالی بود