PDA

View Full Version : سوال: ایجاد کنترل



amatur_barnamenevis
جمعه 14 مرداد 1390, 22:26 عصر
سلام به همه دوستان .نماز و روزه هاتون قبول
چطوری میشه زمانی که فرم در حالت اجرا هست بتونیم یه کنترل ایجاد کنیم مثلا وقتی یه دیکمه رو زدیم یه TextBox ایجاد بشه .این کار امکان پذیره یا نه؟ اگه هست چه طوریه؟ به همچین کاری اصطلاحا چی میگن؟؟
ممنون از همگی

Behzad_MCP
شنبه 15 مرداد 1390, 11:59 صبح
Dim aTxt As New TextBox

aTxt.Text =
"Hello"

aTxt.Location =
New Point(50, 200)


Me.Controls.Add(aTxt)

Mani_rf
شنبه 15 مرداد 1390, 12:26 عصر
قبل از مطرح کردن سوال جستجو نمایید، این موضوع بارها و بارها مطرح شده است.
این تاپیک مشمول قوانین حذف است که به احرام پاسخ داده شده حذف نگردید.

amatur_barnamenevis
شنبه 15 مرداد 1390, 14:28 عصر
شرمندم آخه من اولین بار بود با همچین موضوعی روبرو میشدم حتی سرچ کردنش هم برام مشکل بود هرچی مینوشتم چیزای عجیب میومد.
با عرض معذرت از مدیر بخش و دوستان

newbie2
شنبه 15 مرداد 1390, 23:22 عصر
سلام! نماز روزه همه قبول باشه إن شاء الله!

با اجازه اساتید بخش VB .NET و با پوزش از تأخیر در پاسخ:

اگر شما فقط می‌خواید یه Text Box رو با زدن یه Buttonبه فرم خودتون اضافه کنید یکی از ساده‌ترین راه‌ها اینه که اون رو در هنگام طراحی به فرمتون اضافه کنید ولی خاصیت Visible اون رو برابر False قرار بدید و هرجا که لازم شد اون رو مرئی کنید (یعنی خاصیت Visible اون رو برابر True قرار بدید) و دوباره نامرئی کنید.:چشمک:

اما اگر مایل به کدنویسی برای این کار هستید یا در کد مجبور به این کار هستید راهش اینه:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim txtRunTime As New TextBox
'سایز تکست باکس خود را مشخص کنید
txtRunTime.Size = New Size(500, 3)

'موقعیت مکانی کنترل خود را مشخص کنید
txtRunTime.Location = New Point(10, 10)

'توضیح این رو تو پست بعدی می‌دم
txtRunTime.Tag = "Runtime Text Box"

'این دستور کنترل رو به فرم اضافه می‌کنه
Me.Controls.Add(txtRunTime)

'این‌جا EventHandler خودتون رو تنظیم کنید
AddHandler txtRunTime.Click, AddressOf TxtRunTime_Click

End Sub

Private Sub TxtRunTime_Click(ByVal sender As Object, ByVal e As System.EventArgs)
'
MsgBox("Do Something, User Clicked the Text Box!!")

End Sub


فکر کنم توضیحات ایجاد کنترل کافیه اما راجع به:

AddHandler txtRunTime.Click, AddressOf TxtRunTime_Click

دستور بالا برای ایجاد و مدیریت رویداد (Event) کلیک تکست باکس ایجاد شده به کار رفته به این صورت که: بعد از دستور AddHandler اسم کنترلی که ایجاد کردید و بعد اون رویدادی که مایل به مدیریتش هستید رو میارید (این‌جا همون رویداد کلیک)، در قسمت بعد از AddressOf اون روالی رو که برای این کار در نظر دارید (در این‌جا txtRunTime_Click) میارید.
در آخر روالی که می‌خواید رویداد رو توش مدیریت کنید رو نوشتم که خیلی ساده فقط یک پیام می‌ده.

Private Sub TxtRunTime_Click(ByVal sender As Object, ByVal e As System.EventArgs)
'
MsgBox("Do Something, User Clicked the Text Box!!")

End Sub



این برای یک کنترل بود اما برای آرایه‌ای از کنترل‌ها (چیزی که توی VB6 بود اما در VB .NET جور دیگه‌ای پشتیبانی می‌شه) در پست بعدی خودم توضیحاتی خواهم داد. پس تا یه پست دیگه و یه برنامه دیگه خدا نگهدار:لبخند:

newbie2
یک شنبه 16 مرداد 1390, 00:57 صبح
دوباره سلام؛

قبل از ادامه مطلب خواهش می‌کنم اگه امکان داره نام تاپیک رو با یه نام بهتری عوض کنید تا برای ارجاع‌ها و جستجوهای بعدی مناسب‌تر باشه...

اما ادامه مطلب و این که چه‌طور در زمان اجرا آرایه‌ای (لیستی) از کنترل‌ها ایجاد کرده و اون‌ها رو مدیریت کنیم. لطفا به این مثال کاملا ساده توجه کنید:

'لیستی که به نوعی آرایه‌ای از تکست باکس‌ها رو شامل خواهد شد
Private lst_txt_RunTime As New List(Of TextBox)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer
'حلقه‌ای 10 عددی برای ایجاد 10 عدد تکست باکس
For i = 0 To 9

'یک تکست باکس به لیست تعریف شده‌مون اضافه می‌کنیم
lst_txt_RunTime.Add(New TextBox)

'اندازه و موقعیت تکست باکس رو روی فرم مشخص می‌کنیم
lst_txt_RunTime.Item(i).Size = New Size(500, 30)
lst_txt_RunTime.Item(i).Location = New Point(10, i * 20)
'متن مورد نظر رو به تکست باکس اضافه می‌کنیم
lst_txt_RunTime.Item(i).Text = Format(i, "Text Box 0")
'برای شناسایی‌های آتی خاصیت «تگ» تکست باکس رو مقدار دهی (نشانه گذاری) می‌کنیم
lst_txt_RunTime.Item(i).Tag = i

'این دستور کنترل رو به فرم اضافه می‌کنه
Me.Controls.Add(lst_txt_RunTime.Item(i))

'این‌جا EventHandler خودتون رو تنظیم کنید
AddHandler lst_txt_RunTime.Item(i).Click, AddressOf TxtRunTime_Click
Next
End Sub

Private Sub TxtRunTime_Click(ByVal sender As Object, ByVal e As System.EventArgs)
'با استفاده از خاصیت تگ که نشانه گذاری کردیم تکست باکس مورد نظرمون رو پیدا می‌کنیم تا عمل مورد نظر رو انجام بدیم

If sender.tag = 0 Then
lst_txt_RunTime.Item(0).BackColor = Color.GreenYellow
Else
MsgBox(Format(sender.tag, "Do Something, User Clicked the Text Box 0"))
End If

End Sub

با توجه به پست قبلی و توضیحاتی که داخل کد نوشتم، فکر نمی‌کنم تو درک کارایی کد مشکلی باشه. با این همه اگه مشکلی بود بفرمایید. در ضمن اگر دوستان با تجربه‌تر راه بهتری برای این کار می‌شناسند لطف کنند و بیان کنند.

در آخر اینکه اگه کد رو پیاده کردید Button1 رو عوض یک بار دوبار فشار بدید بعد روی یه تکست باکس (غیر از 0) کلیک کنید تا یه شیرین کاری اتفاق بیافتته!!!:بامزه:

اگه خواستید از این شیرین کاری جلوگیری کنید یادتون باشه باید Event Handler هایی که مشخص کردید رو غیر فعال کنید. مثالی برای غیر فعال کردن Event Handler یکی از تکست باکس‌ها با ایندکس صفر:

RemoveHandler lst_txt_RunTime.Item(0).Click, AddressOf TxtRunTime_Click

در آخر از همه سپاس گزارم و تا یه تاپیک دیگه و یه برنامه دیگه همه‌ی دوستان خوبم رو به خدا می‌سپارم!!:لبخندساده:

amatur_barnamenevis
یک شنبه 16 مرداد 1390, 17:07 عصر
newbie عزیز دستت درد نکنه خیلی عالی بود.حالا اسم تایپیک رو چی بذاریم؟؟

newbie2
دوشنبه 17 مرداد 1390, 01:09 صبح
newbie عزیز دستت درد نکنه خیلی عالی بود.حالا اسم تایپیک رو چی بذاریم؟؟

اول این که خواهش می‌کنم؛ بی‌شک این سایت جایی برای آموزش و رفع اشکاله. هرکسی عضو این سایت شده سؤالی رو می‌بینه که می‌تونه جواب بده یا تاپیکی که می‌تونه به اون مطلبی اضافه کنه باید این کار رو بکنه تا مشارکت در سایت بالا بره و مرجع پرسش و پاسخ‌های کامل و مرکز آموزش جامعی در هر بخش باشه. (چی گفتم؟! :متفکر:)

دوم این که شاید اگر عنوان این تاپیک «ایجاد کنترل در زمان اجرا» یا همچین چیزی باشه در جستجوها و ارجاع‌های بعدی بهتر باشه.

خدا نگهدار

majidsardari
دوشنبه 07 اسفند 1391, 21:30 عصر
خیلی عالی بود مخصوصا دستورهای AddHandler , RemoveHandler