PDA

View Full Version : ایجاد کنترلهای تکراری از کنترل خاص



(سیدشریفی)
دوشنبه 28 اردیبهشت 1383, 09:26 صبح
با سلام
در VB6 میشد با استفاده از دستور Load Text1 یک کنترل دیگر از روی کنترل اصلی ایجاد نمود .
مشکل من اینجاست که اولا در دات نت کنترلها دیگر دارای آرایه نیستند تا این کار را انجام دهم و دیگر اینکه با چه روشی میتوان این مشکل را حل نمود و چندین کنترل را از روی کنترل اصلی ایجاد کرد .
با تشکر
:(

h_rezaei
دوشنبه 28 اردیبهشت 1383, 14:37 عصر
با استفاده از handles , آرگومان sender ، کلکسیون و سایر امکانات Object Oriented تو دات نت دیگه احتیاجی به Array control ها نیست .


Dim txt As New TextBox

' Set the desired properties

txt.Top = 60
txt.Left = 100


' Add to the collection

Controls.Add(txt)

(سیدشریفی)
دوشنبه 28 اردیبهشت 1383, 16:09 عصر
آقای رضایی از پاسختان ممنون
یک مشکل دیگر دارم این که برای ایجاد مثلا 10 کنترل باید 10 بار این کدها را با نام دیگر تکرار کنم یا راه حل دیگری وجود دارد ؟
با تشکر.

linux
دوشنبه 28 اردیبهشت 1383, 21:50 عصر
Dim txt As TextBox
For i As Integer = 1 To 10
txt = New TextBox
txt.Top = (25 * i)
txt.Left = 100
Me.Controls.Add(txt)
Next

(سیدشریفی)
سه شنبه 29 اردیبهشت 1383, 11:42 صبح
آقای Linux از جوابتان متشکر
تقریبا متوجه موضوع شدم که چیکارا باید انجام بدم .
:D

(سیدشریفی)
سه شنبه 29 اردیبهشت 1383, 13:47 عصر
ببخشید یه سوال دیگه هم داشتم .
چطوری به رویداد (مثلا KeyDown) این کنترلها میشود دسترسی پیدا کرد ؟

:?

Farhad.B.S
سه شنبه 29 اردیبهشت 1383, 17:45 عصر
باید به صورت زیر و بطور دینامیک به رویداد های این کنترل ها ، Event handler اختصاص بدید :

AddHandler btnMyButton.Click, Addressof MyEventHandler

پراسیجر MyEventHandler مم باید ترکیبی به شکل زیر داشته باشد :

Private Sub myEventHandler (sender as object, e as System.EventArgs)
...
End Sub

(سیدشریفی)
چهارشنبه 30 اردیبهشت 1383, 09:32 صبح
آقا فرهاد خیلی خیلی ممنون از جوابتون
:تشویق:
:lol:

(سیدشریفی)
چهارشنبه 30 اردیبهشت 1383, 12:09 عصر
آقا فرهاد دو تا مشکل برام پیش اومده .
اول اینکه چطوری به دو کنترل هم نوع که ایجاد شده به یکی از آنها به دلخواه اشاره کرد .
مثلا دو کنترل TextBox ایجاد کرده ایم من میخواهم وقتی کنترل دومی را دوبل کلیک کردم رویداد دوبل کلیک مخصوص به آن اجرا شود .
دوم اینکه وقتی رویداد KeyDown را استفاده میکنم به MyEventHandler ایراد میگیرد .
باتشکر
:shock:

Farhad.B.S
چهارشنبه 30 اردیبهشت 1383, 20:29 عصر
برای رویداد KeyDown ، پراسیجری که قراره رویداد رو مدیریت کنه باید به شکل زیر باشه :


Private Sub MyEventHandler(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
MessageBox.Show("KeyDown event occured !")
End Sub

برای اضافه کردن خود کنترل و همچنین EventHandler از کد زیر استفاده کنید :

Dim MyTextBox As New TextBox()
Me.Controls.Add(MyTextBox)

AddHandler MyTextBox.KeyDown, AddressOf MyEventHandler

(سیدشریفی)
شنبه 02 خرداد 1383, 12:43 عصر
آقا فرهاد لطفا به سوال اول نیز جواب دهید .
چطوری میتوان چند کنترل هم نوع را که ایجاد کرده ایم تشخیص دهیم .
مثلا میخواهیم بفهمیم که در داخل کدام کنترل تکست باکس keydown کرده ایم و یا اینکه در کدام تکست باکس باید متنی نوشته شود .
با تشکر
:(

Farhad.B.S
شنبه 02 خرداد 1383, 20:23 عصر
برای اینکه شیء ای رو که رویداد از طرف اون ارسال شده بدست بیاریم ، از آرگومان sender استفاده میکنیم.
به کد زیر توجه کنید ، تو این کد ابتدا 10 تکست باکس بر روی یک پنل ایجاد میشه.
پراسیجر MyEventHandler هم نقش مدیریت کننده رویداد KeyDown تمام این کنترل ها رو بر عهده داره .
در این پراسیجر ، با تبدیل شیء sender به کنترلی از نوع تکست باکس ، میتونیم به پراپرتی های کنترلی که KeyDown بر روش انجام شده دست پیدا کنیم.



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim txt As TextBox

For i = 1 To 10
txt = New TextBox()
txt.Text = "Text box " + i.ToString()
AddHandler txt.KeyDown, AddressOf MyEventHandler
txt.Top = 25 * i
Panel1.Controls.Add(txt)
Next i

End Sub

Public Sub MyEventHandler(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Dim txt As TextBox
txt = CType(sender, TextBox)
MessageBox.Show(txt.Text)
MessageBox.Show(e.KeyValue)
End Sub

(سیدشریفی)
یک شنبه 03 خرداد 1383, 16:36 عصر
آقا فرهاد از کمکتون خیلی خیلی ممنون .
مشکل بزرگی را برای من حل کردید .
آخه من تازه دات نت را شروع کرده ام و یکمی گیج شده ام .
از دیگر دوستان نیز که در این قسمت به من کمک کردند تشکر میکنم .
آقا فرهاد باز هم ممنون .
:تشویق: :تشویق: :تشویق:
:lol: :lol: :lol: