PDA

View Full Version : سوال : چگونه با وارد كردن اسم يك شيء بهش فرمان بدم .



Neo-08
چهارشنبه 18 شهریور 1388, 02:10 صبح
سلام ، من يك برنامه نويس مبتدي هستم . :خجالت: ، من مدت ها پيش در اين سايت عضو شدم و الان در حالي كه گير افتادم يك دفعه يادم اومد !!!! خيلي خوش حال شدم و دوباره اميد گرفتم . من الان كه اومدم اينجا ، در اصل اين يكي از سوالام هست ، اومدم با كلي سوال ! اميدوارم منو به عنوان يك عضو تازه وارد بين خودتون بپزيريد . حالا كه من اينجا رو پيدا كردم ديگه ولش نميكنم :لبخند:
يك برنامه نوشتم كه تعداد زيادي پنل (panel) ميسازه به اين شكل .

Private Sub s_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles s.Tick
If t2.Text = 650 Then
s.Enabled = False
End If
If t1.Text = 650 Then
t2.Text += 6
t1.Text = 50
Else

End If
Dim a As Panel = New Panel
a.SetBounds(t1.Text, t2.Text, 5, 5)
a.Name = "p" & t1.Text & "-" & t2.Text
a.BackColor = Color.Pink
Me.Controls.Add(a)
t1.Text += 6
End Sub
من ميخوام بدونم چجوري با اين تركيب اسمي كه دادم (با رنگ سبز در كد بالا :لبخند:) ميشه اينجوري عمل كرد :
يك textbox روي فرم ميذارم و يك button پاينش . ميخوام برنامه جوري نوشته بشه كه مثلا داخل textbox نوشتم p51-62 ، وقتي روي butoon كليك شد . پنلي كه با اين اسم ساخته شده رنگش مشكي بشه . راستي من يك تازه كارم پس اگر لطف كنيد ، كدي رو كه منويسيد ،با توضيحات كامل باشه ، خيلي ممنون ميشم :بوس:تا افراد تازه واردي مثل من از اون سر در بيارن . البته اين رو بگم من سر اين موضوع مدت هاست دارم فكر ميكنم و با اطلاعات محدود خودم بار ها و بار ها سعي كردم با راه هاي جديد اين موضوع رو حل كنم . اما ...:افسرده:
ممنون . :قلب:

mc_laren
چهارشنبه 18 شهریور 1388, 05:30 صبح
با سلام
بوسیله دستور زیر این کار رو میشه انجام داد:
Me.Controls("نام کنترل مورد نظر در اینجا پنل").BackColor = Color.Black

Neo-08
چهارشنبه 18 شهریور 1388, 23:12 عصر
بسار از راهنماييتون ممنونم . :قلب:
يك سوال ديگه : چجوري ميشه براي هر كدوم از اون پنل ها دستور نوشت . منظورم اينه كه مثلا وقتي روي 1 button كليك ميكنيد صفحه كد باز ميشه بعدش ميتونيم براي اون يك سري دستوراتي بنويسيم كه بعد از كليك اجرا بشه . چجوري ميشه براي پنل x دستور نوشت ؟
مثلا روي هر كدوم از اون پنل هايي كه قبلا درست كردم كه كليك شد يك msgbox باز بشه و اسمش رو توش نوشته باشه .

Saeed Hamed
جمعه 20 شهریور 1388, 03:18 صبح
چجوري ميشه براي هر كدوم از اون پنل ها دستور نوشت .

شما میتونی با استفاده از دستور AddHandler و وارد کردن یک رویداد از یک آبجکت و نام روالی که قرار است در زمان آن رویداد اجرا شود این کار رو انجام بدی.
موفق باشی

mc_laren
جمعه 20 شهریور 1388, 04:03 صبح
فکر نکمنم بشه بعد از کامپایل شدن فرم دستوری رو داد و اون رو اجرا کرد چون هر دستور برای اجرا شدن نیاز به کامپایل داره

Neo-08
جمعه 20 شهریور 1388, 05:37 صبح
خيلي متشكرم از همه دوستان :قلب:
بله منم فكر ميكنم جناب Saeed Hamed درست ميفرمايند . من خودمم دقيقا نفهميدم ايشون چي گفتند (:لبخند:) ولي الان بعد از كلي سرچ بالاخره 1 الگو آماده پيدا كردم :تشویق: هورا !
اينجوري توش نوشته بود :
اينو جايي كه پنل ايجاد ميشه قرار داده بود :

AddHandler a.Click, New EventHandler(AddressOf Panel_click)
---------------------------------------------------------------------------------------------------
و اين رو هم خارج از همه اينا :

Private Sub panel_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim a As Panel = CType(sender, Panel)
MessageBox.Show("You clicked button with text='" + a.Name + "'")
End Sub
اما 1 چيزشو نفهميدم تو اين كد :
ctype چيه و چرا به كار رفته ؟
يعني مثل نسبت me به فرم ميمونه ؟ يعني دستورات ctype مربوط به همون كنترلي كه توش قرار داره هست؟
--------------------------------------------------------------------------------------------------
راستي الگويي كه پيدا كردم رو ميذارم تو ضميمه تا ساير دوستان هم استفاده كنند.:خجالت: :بوس:

Saeed Hamed
جمعه 20 شهریور 1388, 15:02 عصر
ctype چيه و چرا به كار رفته ؟


CType برای تبدیل نوع دادۀ متغیرها بکار میره به این صورت یک شما شیی را که قرار است تبدیل شود را در آرگومان اول نوشته و آرگومان دوم نوع داده ای را می گیرد که قرار است آرگومان اول به آن تبدیل شود. در نمونه کد شما میاد Objectی که این تابع را فراخوانی کرده است (sender) را به کلاس Panel تبدیل می نماید. با این کار شما می توانید مطمئن باشید که این روال از طریق یک Panel فراخوانی شده است و اگر غیر از این بود با استفاده از یک Try آن را کنترل نمایید. در کل اینجا همچین کاری نیازی نیست برای اینکه فراخوانی این تابع به وسیلۀ خود شما صورت می گیرد در نتیجه نیازی به اطمینان از اینکه sender شما Panel هست نمی باشد.

موفق باشی