PDA

View Full Version : اخذ حافظه برای ساخت اشیا



mehran901
یک شنبه 24 دی 1391, 15:30 عصر
سلام بر دوستان
سوالی داشتم مبنی بر چگونگی ساخت اشیای جدید در زمان اجرای برنامه ....
بذارین اینجوری بگم
برنامه هایی مثل FlowCOde رو شاید بعضی ها دیده باشین.... (برنامه ای برای رسم فلوچارت و تبدیل اون به کد )
فرضا میخوایم اینجور موردی بنویسیم به صورتی که
بتونیم از یک تصویر باکس ( یا کنترل های دیگه ) هر تعدادی رو در زمان اجرا ایجاد کنیم و در موقعیت خاصی بذاریم ( حتی در فرم جدید قرار بدیم *) (البته نمیدونم شی هایی که با گرفتن حافظه دینامیکی ساخته میشن رو میشه توسط متدهایی مثل move کنترل کردیا نه ... )

از دوستان تقاضا دارم در این زمینه بهم کمک کنن

مثال ساده ای هم از ساخت اشیا بیان کنم :


Dim a as new form
a.caption ="tst"
a.show vbmodal

SlowCode
یک شنبه 24 دی 1391, 15:48 عصر
سلام
با متد Load میتونی یه شئ رو به تعداد دلخواه درست کنی، مثلا:

For i=1 to 10
Load(txt(i))
txt(i).left=i*100
txt(i).visible=true
Next

البته باید قبل از اجرای این کد شئ txt با ایندکس 0 موجود باشه.
روش دیگه استفاده از کلاس هست که خودتون بهش اشاره کردین.
روش دیگه هم شبیه اولیه ولی مثل تابع لود نمیشه ازش استفاده کرد و حجم کد نویسی هم زیاده و روی بعضی سیستم ها جواب نمیده، مثلا:

Set txt=controls.add("vbtextbox","text1")
txt.visible=true

mehran901
دوشنبه 25 دی 1391, 08:57 صبح
ممنون از پاسخ عالی شما ،
متاسفانه هرچی تلاش کردم نتونستم error موجود در هر 2 کد رو که مبنی بر عدم کاربرد درست سینتکس هست رو رفع کنم
در مورد استفاده از کلاس ، و شیوه ای که من استفاده کردمبرای ساخت فرم جدید ، چطور میشه کنترل جدید ایجاد کرد... هرکاری کردم مشکل پیش اومد
, و ی مسئله دیگه .... چطور اونت کدهای اشیای مجازی رو کنترل کنیم ؟

امکانش هست سورس ازش بذارین ؟

تشکر ویژه

SlowCode
دوشنبه 25 دی 1391, 09:59 صبح
بله درست میگی، تو کد اولی یه پرانتز اضافه است، تو دومی هم یه نقطه کمه.
این کدها رو امتحان کن، تست شده هستن. ولی اگه بازم نتونستی ازش استفاده کنی بگو تا سورس بزارم.
For i = 1 To 5
Load txt(i)
txt(i).Left = i * 1500
txt(i).Text = "text" & i
txt(i).Visible = True
Next
فقط کنترل txt با ایندکس 0 یادت نره.
در این روش کنترل جدید بعضی از خصوصیاتش رو از عنصر اصلی ارث می بره، مثلا مختصات.

روش دوم:

Set a = Controls.Add("vb.textbox", "text1")
a.Left = 120
a.Top = 800
a.Visible = True


چطور اونت کدهای اشیای مجازی رو کنترل کنیم ؟
مجازی نیستن که حقیقین، مثل کنترل های دیگه. نمونش رو تو مثال های بالا گفتم.


امکانش هست سورس ازش بذارین ؟امکانش هست ولی راستش رو بخوای حوصلش رو ندارم:گیج:

این صفحه (http://www.vbforums.com/showthread.php?342054-VB-How-to-load-a-control-at-runtime.)رو بخون به دردت میخوره.

SlowCode
دوشنبه 25 دی 1391, 10:10 صبح
واسه کلاس هم باید کلاس نویسی رو یاد بگیری(بهتره از روش اول استفاده کنی)
این صفحات رو بخون.
http://www.vbexplorer.com/VBExplorer/wrox/sample172X.asp
http://edais.mvps.org/Tutorials/Classes/index.html
http://edais.mvps.org/Tutorials/AdvClass/index.html

mehran901
دوشنبه 25 دی 1391, 10:21 صبح
ممنونم....
اتفاقا صفحه ای که معرفی کردین رو پیدا کردم و میخواستم الان معرفیش کنم... بسیار مطالب خوبی آموزش داده
مشکل کوچیکی که وجود داره وقتی شی ای که میخوایم بسازیم باید نام اون از قبل تعریف شده باشه پس ما فقط یک نمونه از اون شی رو میتونیم بسازیم در این حالت میتونیم با استفاده از withevents واسش event بنویسیم ولی اگه اشیا رو به تعداد زیاد بخوایم تولید کنیم باید آرایه ای این کار انجام بشن و در این حالت دستور withevents ساپورت نمیشه .... به نظرتون چطوری واسه آرایه ای از اشیا کد بنویسیم
؟

به مثال زیر دقت کنید


Dim WithEvents cmdButton As CommandButton

Set cmdButton = Me.Controls.Add("VB.CommandButton", "newCommandButton" )

Private Sub cmdButton_Click()
MsgBox "hi"
End Sub
With cmdButton
.Left = 1000
.Top = 1000
.Width = 2000
.Height = 500
.Caption = "Hello"
.Visible = True
End With



و در حالت آرایه ای :

Dim cmdButton(4) As CommandButton

Private Sub Form_Load()

Dim i As Integer

For i = 0 To 4
Set cmdButton(i) = Me.Controls.Add("VB.CommandButton", "cmdButton" & Me.Controls.Count)
With cmdButton(i)
.Left = 750 * i
.Top = 1000
.Width = 700
.Height = 500
.Caption = "Hello"
.Visible = True
End With
Next i

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim i As Integer

For i = 0 To 4
Set cmdButton(i) = Nothing
Next i



ایده ای دارین واسه نوشتن اونت در حالت آرایه ای ؟
تشکر جدا
ممنون

mehran901
سه شنبه 26 دی 1391, 01:45 صبح
دوستان در رابطه به نوشتن event کد واسه اشیایی که به صورت آرایه ای ساخته میشن به ذهنشون نمی رسه ؟ ( یا به هر روش دیگه فقط بشه تعداد زیادی از یک شی رو ایجاد کرد )

ممنون