PDA

View Full Version : حذف شئ در زمان اجرا



فاطمه وطن دوست
چهارشنبه 12 تیر 1387, 12:34 عصر
هر شئ ای که ایجاد میشه خصوصیاتش کجا ثبت میشه .

مثلا تو زمان طراحی فرم ها وقتی یه شئ ای رو میاریم روی فرم ، و بعد حذفش میکنیم این حذف

چه کاری انجام میده ( میدونم شئ حذف میشه ) چطوری از بین میره این شئ ؟

حالا اگر بخوایم تو زمان اجرای برنامه شئ ای حذف بشه باید ( یه یوزر کنترل ایجاد بشه و براش یه

ایونت ساخته بشه - راست کلیک / حذف) زده شد پاک بشه این شئ ( یوزر کنترل)

دقیقا نمیدونم حذف یه شئ چطوری انجام میشه - چه کاری باید انجام بشه .

اگرم کلا دارم راهو اشتباه میرم بهم بگین .

sokote_bi_payan
چهارشنبه 12 تیر 1387, 12:57 عصر
به نام خدا
سلام
آخه به چه درد مي خوره ؟ خوب آنويزيبل اش كن

فاطمه وطن دوست
چهارشنبه 12 تیر 1387, 13:05 عصر
به نام خدا
سلام
آخه به چه درد مي خوره ؟ خوب آنويزيبل اش كن

سلام
واقعا باید این کارو انجام بدم . :لبخندساده:

فاطمه وطن دوست
چهارشنبه 12 تیر 1387, 15:41 عصر
سلام

من از این کدا برای حذف و اضافه کردن کنترل استفاده کردم ولی چرا برای usercontrol جواب نمیده ؟
البته اینو خودم ننوشتم . کسی کمکم کرد. دستشون درد نکنه.





General
Dim WithEvents ComSavBmp As VB.CommandButton ----> project1.usercontrol
Dim i As Integer
---------------------------------------------------------------------------------------------------------------------------------
Private Sub Command1_Click()
On Error Resume Next
i = i + 1
Set ComSavBmp = Controls.Add("VB.CommandButton"-----> project1.usercontrol , "ComSavBmp" & i, Me)
With ComSavBmp
.Move 950, 1365 + (i * 330), 3060, 330
.Caption = "B"
.Enabled = True
.Visible = True
End With
End Sub
-------------------------------------------------------------------------------------------------------
Private Sub Command2_Click()
Controls.Remove "ComSavBmp" & i
i = i - 1
End Sub
---------------------------------------------------------------------------------------------------------------------------------
Private Sub Form_Load()
i = 0
End Sub




البته به جای قسمت های آبی ، UserControl رو نوشتم .
و در قسمت قرمز رنگ خواص خود USERCONTROL رو نوشتم.

چون خط کپشن نداره و........

project1.usercontrol ----> چون ماله پروژمه .

kazme_gheyz
چهارشنبه 12 تیر 1387, 19:15 عصر
تو میتونی از API استفاده کنی
با استفاده از تابع FindWindow میتونی HWND فرم رو بدست بیاری و بعدش با تابع FindWindoweEx باید hwnd شی user control رو بدست بیاری بعد با تابع Sendmessagebylong فکر کنم باشه میتونی WM_Close رو ارسال کنی به usercontrol
اینجوری اون حذف میشه

همه ی این کارها با توابع API باید انجام بدی
نظرت چیه؟:لبخندساده:

فاطمه وطن دوست
چهارشنبه 12 تیر 1387, 20:29 عصر
سلام





Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
-----------------------------------------------------------------------------------------------------------------

Private Sub Command1_Click()

Dim OUTFINDWINDOW As Long
Dim OUTFINDUSERCONTROL As Long
Dim OUTSendMassage As Long


OUTFIND = FindWindow(vbNullString, "FORM1") √

OUTFINDUSERCONTROL = FindWindowEx(Form1.hwnd, 0, "ThunderUserControl", vbNullString)

OUTSendMassage = SendMessage(OUTFINDUSERCONTROL, WM_Close, ByVal CLng(1), ByVal pathstring)

Print OUTFIND
Print OUTFINDUSERCONTROL
End Sub
]

نام کلاس پنجره : ThunderUserControl

OUTFINDUSERCONTROL ---> خروجی صفر برمیگردونه .:لبخندساده:

__H2__
پنج شنبه 13 تیر 1387, 01:43 صبح
سلام
در VB6 به ذات فقط یک راه برای اضافه و حذف کردن در runtime وجود دارد و ان استفاده از آرایه های کنترلی و دو دستور Load و Unload است.

ولی در VB7~9 هر کاری که در زمان طراحی قابل انجام باشد در runtime هم انجام پذیر است (هر کاری)، حتی کامپایل و ساخت exe جدید، چه رسد به ...!!!!

vbhamed
پنج شنبه 13 تیر 1387, 17:10 عصر
سلام

خصوصيات اشياء تو خود فايل .frm نوشته ميشه، اما تو محيط ويژوال بيسيك ديده نميشه
مي تونيد مثلا فايل form1.frm رو داخل نوت پد باز كنيد تا ببينيد

براي حذف كنترلها هم همونطور كه __H2__ (http://barnamenevis.org/forum/member.php?u=35296) عزيز گفتن بايد از كنترلهاي آرايه اي و دستور Load و Unload استفاده كرد

فرض كنيد يك TextBox به نام txt(0) روي فرم داريم، حالا براي اضافه كردن دستور زير رو مي ديم


Load txt(1)
Load txt(2)
.
.

البته خاصيت Visible و Left و Top كنترلهاي ايجاد شده رو هم تنظيم كنيد چون روي قبلي ميفته
و براي حذف


UnLoad txt(1)
Unload txt(2)
.
.
فقط اينكه كنترلهايي كه خودمون ايجاد كرديم رو ميشه Unload كرد و در مورد txt(0) نميشه

kazme_gheyz
پنج شنبه 13 تیر 1387, 18:53 عصر
سلام آبجی
اینو تست کن حوصله ندارم توضیح بدم:لبخند:

Mbt925
پنج شنبه 13 تیر 1387, 21:30 عصر
General
Dim WithEvents ComSavBmp As VBControlExtender
Dim i As Integer
---------------------------------------------------------------------------------------------------------------------------------
Private Sub Command1_Click()
On Error Resume Next
i = i + 1
Set ComSavBmp = Controls.Add("project1.usercontrol", "ComSavBmp" & i, Me)
With ComSavBmp
.Move 950, 1365 + (i * 330), 3060, 330
.Caption = "B"
.Enabled = True
.Visible = True
End With
End Sub
-------------------------------------------------------------------------------------------------------
Private Sub Command2_Click()
Controls.Remove "ComSavBmp" & i
i = i - 1
End Sub
---------------------------------------------------------------------------------------------------------------------------------
Private Sub Form_Load()
i = 0
End Sub