مهمان عزیز خوش آمدید جستجو | تاپیک های فعال | فهرست اعضـاء | ورود | ثبت نام

ساخت يك كنترل در زمان اجرا گزینه ها · مشاهده
بابک زواري
فرستاده شده در : چهارشنبه ۲ اسفند ۱۳۸۵ در ساعت 10:49



رتبه: مدیر کل سایت

زمان عضویت: ۱۳۸۵/۱۱/۲۴
تعداد پست ها: 3,279
مکان: Heart of VS2008
تشکر: 921
1920 بار تشکر شده در 1015 پست

ساخت يك كنترل در زمان اجرا
گاهي از اوقات در برنامه احتياج هست که يک کنترل ( براي مثال يک Button يا يک Image ) را در هنگام اجرا بوجود آوربد . اين کار در vb6 با استفاده از توابع API صورت مي گرفت ولي در VB.NET اين کار را به راحتي آب خوردن مي توان درون برنامه انجام داد
ساخت يك كنترل در زمان اجرا
گاهي از اوقات در برنامه احتياج هست که يک کنترل ( براي مثال يک Button يا يک Image ) را در هنگام اجرا بوجود آوربد . اين کار در vb6 با استفاده از توابع API صورت مي گرفت ولي در VB.NET اين کار را به راحتي آب خوردن مي توان درون برنامه انجام داد.
در .NET کافيست که يه نمونه از کنترل مورد نظر را در حافظه تعريف کنيد و بعد از تنطيم خصوصيات با استفاده از متد Controls.Add() آن را روي فرم ظاهر کنيد.
براي مثال يک نمونه از Button اينگونه ساخته مي شود:

  کد:
Dim btn As New Button() 'Declare a New Instance of an Button
With btn 'Set Control Properties
   .Text = "Created at Run time"
   .Width = 150
   .Height = 20
   .Location = New Point(100, 200)
End With
Me.Controls.Add(btn) 'Add the Control to Form


تا اينجا دکمه ساخته شده و روي فرم قرار گرفته است ، ولي چگونه مي توان براي رويدادهاي اين دکمه نيز برنامه نوشت؟
براي اين منظور ابتدا بايد يک روال براي رويداد مورد نظر و با همان پارامترهايي که براي يک دکمه معمولي بکار مي رود نوشت ، براي مثال رويداد کليک يک دکمه :

  کد:
Sub onclick(ByVal sender As Object, ByVal e As EventArgs)
    'Insert Event Code Here
End Sub


و سپس اين رويداد را به روال مورد نظر نسبت مي دهيم به صورت زير :
AddHandler رويداد مربوط به کنترل, AddressOf نام روال نوشته شده براي رويداد
براي مثال:

  کد:
AddHandler btn.Click, AddressOf onclick 'Set the Control Event With Its Sub

با استفاده از دستور RemoveHandler مي توان ارتباط ميان رويداد و کنترل را از ميان برداشت. براي مثال:

  کد:
RemoveHandler btn.Click, AddressOf onclick


با دستور Me.Controls.Remove() نيز مي توانيد يک کنترل را در زمان اجرا از فرم حذف کنيد.
در مثال زير ابتدا دکمه اي را در حافظه تعريف کرده و سپس به کنترل هاي روي فرم اضافه مي کند ، با يک روال نيز در رويداد کليک مي گوئيم که کادر پيام با مضمون کليک شدن روي دکمه ظاهر گردد و در پايان نيز دکمه مورد نظر را حذف مي کنيم:

  کد:

Dim btn As New Button()
Overloads Sub onclick(ByVal sender As Object, ByVal e As EventArgs)
    MsgBox("You Click :" & CType(sender, Button).Text)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  Handles MyBase.Load
    With btn 'Set Control Properties
        .Text = "Created at Run time"
        .Width = 170
        .Height = 20
        .Location = New Point(100, 200)
    End With

    'Set the Control Event With Its Sub
    AddHandler btn.Click, AddressOf onclick
    'Add the Control to Form
    Me.Controls.Add(btn)
End Sub

'Button1 Created in Design View
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
    RemoveHandler btn.Click, AddressOf onclick
    Me.Controls.Remove(btn)
End Sub


براي مشكلات بن بستي نيست ؛ يا راهي خواهيم يافت يا راهي خواهيم ساخت .


developers
فرستاده شده در : دوشنبه ۱۹ بهمن ۱۳۸۸ در ساعت 15:13


رتبه: عضو جديد

زمان عضویت: ۱۳۸۸/۱۱/۱۸
تعداد پست ها: 1
مکان: شیراز
تشکر: 0
0 بار تشکر شده در 0 پست

با سلام و خسته نباشید
کد شما مثالی خوبی بود اما کامل نبود
من می خواهم بدونم که چطور می تونم دکمه ای که الان کلیک شده رو شناسایی کنم و برای اون یک سری دستورات خاص بنویسم
فرض کنیم که اون شی صفتی مثل tag نداشته باشه
خدا زکات علمتون رو قبول کنه
DotNet
فرستاده شده در : دوشنبه ۱۹ بهمن ۱۳۸۸ در ساعت 15:29



رتبه: کاربر نقره ای

زمان عضویت: ۱۳۸۶/۴/۱۷
تعداد پست ها: 392
تشکر: 59
91 بار تشکر شده در 78 پست

در اوینتهای ویندوزی مثل کلیک و اینها یک sender هست که مشخص می کنه چه شیی این ایونت رو فایر کرده شما با اون می توی کار کنی اینجا sender برابر button هستش می تونه هر چیزی باشه

Free Software Foundation
بابک زواري
فرستاده شده در : دوشنبه ۱۹ بهمن ۱۳۸۸ در ساعت 17:33



رتبه: مدیر کل سایت

زمان عضویت: ۱۳۸۵/۱۱/۲۴
تعداد پست ها: 3,279
مکان: Heart of VS2008
تشکر: 921
1920 بار تشکر شده در 1015 پست

developers نوشته است:
با سلام و خسته نباشید
کد شما مثالی خوبی بود اما کامل نبود
من می خواهم بدونم که چطور می تونم دکمه ای که الان کلیک شده رو شناسایی کنم و برای اون یک سری دستورات خاص بنویسم
فرض کنیم که اون شی صفتی مثل tag نداشته باشه
خدا زکات علمتون رو قبول کنه



تو باكس آخر اينجا نوشته شده ؛ اگه يك مقدار دقت كنيد كد كامل هست .


  کد:


Dim btn As New Button()
Overloads Sub onclick(ByVal sender As Object, ByVal e As EventArgs)
    MsgBox("You Click :" & CType(sender, Button).Text)
End Sub


براي مشكلات بن بستي نيست ؛ يا راهي خواهيم يافت يا راهي خواهيم ساخت .


بابک زواري : این کاربر بخاطر مطلب مفیدتان از شما تشکر کرده است.
M.Kavyani در ۱۳۸۸/۱۱/۱۹
کاربرانی که این تاپیک را مشاهده می کنند
كاربر مهمان


پرش به
شما نمی توانید در این انجمن پست جدید ارسال کنید.
شما می توانید در این انجمن به تاپیک ها پاسخ دهید.
شما نمی توانید در این انجمن پستهایتان را حذف کنید.
شما نمی توانید در این انجمن پستهایتان را ویرایش کنید.
شما نمی توانید در این انجمن نظرسنجی ایجاد کنید.
شما می توانید در این انجمن در نظرسنجی ها رای بدهید.

RSS اصلي انجمن : RSS

FlatEarth Theme Created by Jaben Cargman Tiny Gecko
Developed by Dotnetsource.com Team

این انجمن با استفاده از Yet Another Forum.net، نسخه 1.9.0 NET v2.0 - ۱۳۸۵/۷/۱۸ کار می کند