ورود

View Full Version : سوال: راهنمایی : استفاده از متغیر ابجکت ؟



سپهر-111
دوشنبه 19 فروردین 1392, 22:43 عصر
سلام دوستان
من وقتی از یک متغیر ابجکت به این صورت استفاده میکنم اررو نمیده :(در ورودی یک تابع یا روال)

Public Sub Lbl_Show(Frm As Form)
Frm.Labell = "Test"
End Sub


ولی وقتی اینطوری میخوام استفاده کنم ارورر میده



Public NameForm As String
NameForm = "form1"
Public Sub A(name As String)
Dim Frm As Form
Frm = NameForm
Frm.Labell = "Test"

End Sub







چرا وقتی میخوام متغیری که از نوع ابجکت تعریف کردم بهش مقدار بدم اررور میده ؟؟

ممنون میشم راهنمایی بفرمایید

SlowCode
دوشنبه 19 فروردین 1392, 23:25 عصر
کد دومت خیلی درهم و اشتباهه.

Public Sub New_Form(Optional Label_Name As String)
Dim frm As Form
Set frm = New Form1
frm.Label1.Caption = Label_Name
frm.Show
End Sub

Private Sub AddNewForm_Click()
New_Form
End Sub

بزرگترین اشتباه شما اینه که از name به عنوان پارامتر استفاده کردی! این اسم رزرو شده است.

سپهر-111
دوشنبه 19 فروردین 1392, 23:35 عصر
کد دومت خیلی درهم و اشتباهه.

Public Sub New_Form(Optional Label_Name As String)
Dim frm As Form
Set frm = New Form1
frm.Label1.Caption = Label_Name
frm.Show
End Sub

Private Sub AddNewForm_Click()
New_Form
End Sub

بزرگترین اشتباه شما اینه که از name به عنوان پارامتر استفاده کردی! این اسم رزرو شده است.


سلام
ممنون محسن جان
ولی یک مشکل دیگه هنوز باقیست
من میخوام
Set frm = New Form1
به جای Form1 از یک متغیر استرینگ استفاده کنم ولی ارورر میده
مثلا :

str="form1"
Set frm = New str

ولی جواب نمیده ممنون میشم راهنمایی فرمایید

محسن واژدی
سه شنبه 20 فروردین 1392, 08:08 صبح
من میخوام
Set frm = New Form1
به جای Form1 از یک متغیر استرینگ استفاده کنم ولی ارورر میده
مثلا :

str="form1"
Set frm = New str

ولی جواب نمیده ممنون میشم راهنمایی فرمایید



سلام علیکم
کد زیر بررسی کنید:
Private Sub Command1_Click()
Dim frm As Form
Set frm = Forms.Add("Form1")
frm.Show
End Sub

موفق باشید

سپهر-111
سه شنبه 20 فروردین 1392, 08:11 صبح
سلام دوستان و اساتید گرامی
من میخوا م همانند وروری تابع که یک نام بهش میدیم و اون به یک فرم نسبت میده را در درون تابع انجام دهم ولی نمیشه ، امیدوارم که منظورم رسونده باشم
ممنون میشم راهنمایی بفرمایید

سپهر-111
سه شنبه 20 فروردین 1392, 08:15 صبح
سلام علیکم
کد زیر بررسی کنید:
Private Sub Command1_Click()
Dim frm As Form
Set frm = Forms.Add("Form1")
frm.Show
End Sub

موفق باشید


سلام جناب استاد واژدی
باتشکر از این که جواب دادید
من نمیخوام فرم جدید ایجاد کنم
من میخوام همانند تابعی بالا(که در پست اول نوشتم) میخوام در درون تابع هم همچین کاری انجام بدم
میخام یکی از فرمهای موجود را صدا بزنم ، یعنی یع چیزی
مثل این :
str=form1
str.Label1.caption=test
ممنون میشم راهنمایی بفرمایید

محسن واژدی
سه شنبه 20 فروردین 1392, 08:17 صبح
سلام دوستان و اساتید گرامی
من میخوا م همانند وروری تابع که یک نام بهش میدیم و اون به یک فرم نسبت میده را در درون تابع انجام دهم ولی نمیشه ، امیدوارم که منظورم رسونده باشم
ممنون میشم راهنمایی بفرمایید
سلام علیکم
میتونید کد پست 4 را به یک تابع اضافه کنید

سپهر-111
سه شنبه 20 فروردین 1392, 08:24 صبح
سلام علیکم
میتونید کد پست 4 را به یک تابع اضافه کنید


باتشکر از شما
ولی شوربختانه اینم جواب من نیست !
من در اصل : در درون ماژول یک تابع دارم که میخوام نام یک فرم در یک متغیر رشته از نوع عمومی وجود دارد را به یک نام یک شی که در ان فرم وجود دارد را نسبت دهم ،
مثل این:

Public Str As String
Str = "Tsstform1"

Str.Label1.Captoin = "ok"

محسن واژدی
سه شنبه 20 فروردین 1392, 08:43 صبح
کد زیر هم امتحان کنین:
Private Sub Command1_Click()
Dim fForm
Dim sFormN$
sFormN$ = "form1"
For Each fForm In Forms
If LCase(fForm.Name) = LCase(sFormN$) Then
fForm.Label1.Caption = "ok"
End If
Next
End Sub

موفق باشید

سپهر-111
سه شنبه 20 فروردین 1392, 09:42 صبح
کد زیر هم امتحان کنین:
Private Sub Command1_Click()
Dim fForm
Dim sFormN$
sFormN$ = "form1"
For Each fForm In Forms
If LCase(fForm.Name) = LCase(sFormN$) Then
fForm.Label1.Caption = "ok"
End If
Next
End Sub

موفق باشید

متشکرم جناب استاد واژدی

ایا راهی نداره که از دستور For Each استفاده نکنم
اخه من فقط میخوام برای یک فرم این کار انجام بدم

vbhamed
سه شنبه 20 فروردین 1392, 11:09 صبح
سلام

خب چيزي كه مسلمه اينه كه شما نمي‌تونيد شيء فرم رو به يك متغير نسبت بدين، شيء فرم كلي متد و خاصيت داره كه متغير رشته اي چنين چيزي رو نداره و اصلا ماهيت اين دو با هم فرق دارن، نهايتا اينكه مي‌تونيد يك تابع بنويسيد كه خروجيش از نوع Form باشه تا استفادتون راحت تر باشه ولي درون اون تابع هم يا بايد از For Each استفاده كنيد يا مستقيما از روي يك پارامتر ورودي رشته اي كل تابع رو به يك فرم نسبت بدين
در حالت اول كه جناب واژدي كد رو گذاشتن، در حالت دوم هم نمونه زير رو ببينيد


Private Function MyForm(frmname As String) As Form

On Error Resume Next

Select Case LCase$(frmname)
Case "form1": Set MyForm = Form1
Case "form2": Set MyForm = Form2
Case "form3": Set MyForm = Form3
Case "form4": Set MyForm = Form4
Case "form5": Set MyForm = Form5
End Select

End Function

Private Sub Form_Load()

Dim frm As Form

Set frm = MyForm("form5")

frm.Show

End Sub