نمایش نتایج 1 تا 9 از 9

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

  1. #1

    Unhappy استفاده از یک ایونت برای چند کنترل

    سلام ، من یه فرم دارم که پر از textbox هستش و میخوام برای اونا رویداد مشابه رو بنویسم
    (مثلا یه رویداد gotfocus ) اما خب تعدادشون خیلی زیاده و اگر بخوام واسه تک تکشون این رویداد رو بنویسم که .....
    من خودم فکر میکنم که حتما راهی هست ( مثل css توی وب )
    چیزی که به ذهن من میرسه استفاده از یه تابع هست یا استفاده از وراثت!! آیا درسته ؟
    اگر هست یه کم راهنماییم کنین اگر هم درست نیست روش درست رو به من بگین ، مرسی

  2. #2
    در بخش انتهایی هر رخداد کلمه Handles رو میبینید؟
    این کلمه بیان میکنه که چه کنترلی این رخداد رو اجرا کنه
    بعدش هم نام کنترل و رخداد هستش مثل btnLeft.Click
    شما کافیه که نام کنترلتون رو با رخداد مورد نظر آخر این خط اضافه کنید مثلا:

    Handles btnleft.click,btnright.click,txtname.gotfocus

  3. #3
    نقل قول نوشته شده توسط twelve مشاهده تاپیک
    سلام ، من یه فرم دارم که پر از textbox هستش و میخوام برای اونا رویداد مشابه رو بنویسم
    (مثلا یه رویداد gotfocus ) اما خب تعدادشون خیلی زیاده و اگر بخوام واسه تک تکشون این رویداد رو بنویسم که .....
    من خودم فکر میکنم که حتما راهی هست ( مثل css توی وب )
    چیزی که به ذهن من میرسه استفاده از یه تابع هست یا استفاده از وراثت!! آیا درسته ؟
    اگر هست یه کم راهنماییم کنین اگر هم درست نیست روش درست رو به من بگین ، مرسی
    سلام.
    برای اینکار باید توی یه حلقه و بازای دونه دونه کنترلهایی که تو Controls Collection فرم هستن، event مورد نظرتون رو رجیستر کنید. من VB بلد نیستم اما کد معادلش در C#‎ رو براتون می نویسم:

    private void RegisterEvents(Control.ControlCollection controls)
    {
    foreach (Control ctrl in controls)
    {
    if (ctrl.HasChildren)
    RegisterEvents(ctrl.Controls);

    if (!ctrl.TabStop)
    continue;

    ctrl.GotFocus += new EventHandler(ctrl_GotFocus);
    }
    }

    void ctrl_GotFocus(object sender, EventArgs e)
    {
    }



    بعدش توی OnLoad میتونید تابع بالا رو صدا کنید.

  4. #4
    جناب bisavad_moshtagh خب این هم دقیقا میشه همون راه حمالی! ببینید من میخوام به فرم حالی کنم که هر جا textbox بود ، یه رویداد رو براش اجرا کنه! مثلا اینجوری

     
    Dim Cll as new Collection
    Cll= Controls
    if typeof cll is textbox then
    if cll.text= "" then
    messagebox.show
    end if


    من این چنین کدی رو مینویسم مثلا برای نمایش پیغام ، اما الان میخوام بجای نمایش پیغام ، یه رویداد خاص اجرا بشه!

    کد:
    private void RegisterEvents(Control.ControlCollection controls) { foreach (Control ctrl in controls) { if (ctrl.HasChildren) RegisterEvents(ctrl.Controls); if (!ctrl.TabStop) continue; ctrl.GotFocus += new EventHandler(ctrl_GotFocus); } } void ctrl_GotFocus(object sender, EventArgs e) { }
    فکر کنم این همونه که من میخوام اما من این رو درست متوجه نمیشم ، میشه به vb ترجمه کنین؟!!

  5. #5
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    38
    پست
    1,090
    Private Sub RegisterEvents(Byval controls As control.controlcollection)
    for each ctrl in controls
    if ctrl.Hashchildren then
    registerevents(ctrl.controls)
    end if
    if Not ctrl.tabstop then

    end if
    ctrl.goftFocus=ctrl.gotFocus + new EventHandler(ctrl_gotFocus)
    next
    end sub

    sub ctrl_GotFocus(byval sender as object, byval e as EventArgs)
    end sub

    'Fekr mikonam in beshe

  6. #6

    البته با کمی تغییر

    if Not ctrl.tabstop then
    else
    sub ctrl_GotFocus(byval sender as object, byval e as EventArgs)
    end if

  7. #7
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    میبخشید کاربر eyes_shut_number1، اما فکر کنم کد شما در VB.Net درست عمل نکند!
    من بودم این کد را ترجیح میدادم! و کافیست در رویداد Form_Load اشاره گر Me را به آن پاس دهید.

    Private Sub RegisterEvents(ByVal control As System.Windows.Forms.Control)
    For Each c As System.Windows.Forms.Control In control.Controls
    If c.HasChildren Then
    RegisterEvents(c)
    ElseIf TypeOf c Is System.Windows.Forms.TextBox Then
    AddHandler c.GotFocus, AddressOf Ctrl_GotFocus
    EndIf
    Next
    End Sub

    Sub Ctrl_GotFocus(ByVal sender As Object, ByVal e As EventArgs)
    '...AnyCode
    End Sub

  8. #8
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    38
    پست
    1,090
    Man faghat code doste aziz mehdi ro tarjomekardam
    hala ya ishon eshtbah zadam ya begofteye shoma bande
    mamnon _h2_

  9. #9
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    نقل قول نوشته شده توسط eyes_shut_number1 مشاهده تاپیک
    Man faghat code doste aziz mehdi ro tarjomekardam
    hala ya ishon eshtbah zadam ya begofteye shoma bande
    mamnon _h2_
    مشکل خاصی نبوده، صرفاً یک خط کد زیر در #C صحیح است:

    ctrl.GotFocus += new EventHandler(ctrl_GotFocus);

    ولی معادل ان در VB.Net این میشود:

    AddHandler c.GotFocus, AddressOf Ctrl_GotFocus

    ایراد اصلی فقط در همین تک خط تبدیل شده بوده!

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •