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

نام تاپیک: مشکل در AddHandler

  1. #1
    کاربر دائمی آواتار Ehsan Rafsanjani
    تاریخ عضویت
    آبان 1384
    محل زندگی
    مشهد
    پست
    105

    Question مشکل در AddHandler

    مشکل در AddHandler
    توی صفحه من یک کلید وجود داره که باید با کلیک اون یک کلید دیگه توی صفحه بوجود بیاد
    کد زیر رو براش نوشتم:
    Dim bt1 As Button

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

    bt1 = New Button
    bt1.Text = "ehsna"
    AddHandler bt1.Command, AddressOf test1

    PlaceHoder1.Controls.Add(bt1)
    End Sub


    Sub test1(ByVal s As System.Object, ByVal e As CommandEventArgs)
    .
    .
    .
    .
    End Sub
    حالا مشکل من این جاست که وقتی Button1 کلیک می شود و bt1 نمایش داده میشه
    1 روال test1 اجرا نمی شه
    2 بعد از کلیک دوباره صفحه بدون bt1 لود میشه


    * این در حالی که اگر کدهای بوجود آمدن کلید جدید رو در روال PageLoad قرار بدیم مشکل حل میشه ولی من میخوام با کلیک کردن Button1 این کار رو انجام بدم
    اگه کسی از دوستان بتونه کمکم کنه و نمونه کد صحیح رو برام بزاره خیلی ممنون میشم

  2. #2
    این نظری که میدم به نوعی پاک کردن صورت مسئله ست ولی خب... چرا از خاصیت visible استفاده نمیکنید؟
    در هر صورت به نتیجه رسیدید جواب رو حتماً برای ما هم بنویسید تا استفاده کنیم.
    موفق باشید.

  3. #3
    کاربر دائمی آواتار Ehsan Rafsanjani
    تاریخ عضویت
    آبان 1384
    محل زندگی
    مشهد
    پست
    105
    می شه بطور موقت این کار رو برای چند تا کلید محدود انجام داد ولی صفحه من طوری که تعداد کلید ها اصلا محدود نیست و حتما باید هوشمند این کار رو انجام داد
    به هر حال اگه از دوستان کسی بتونه کمک کنه خیلی ممنون آخه بدجوری گیر کردم

  4. #4
    1 روال test1 اجرا نمی شه
    اگر به lifetime صفحات وب توجه کنید جواب ساده است. به ترتیب اجرای چند روال زیر توجه کنید:
    1) page load
    2) control events
    3) peage prerender
    شما در زمانی که نوبت اجرای یک event هست دارید تازه اون رو می سازید. این اتفاق با هر بار درخواست صفحه میافته و پس از ارسال اون صفحه برای کلاینت تمام منابع سیستم آزاد میشه. web form ها و کنترل های اون ها (جواب مشکل دوم) بر خلاف windows form ها فقط بین زمان درخواست تا ارسال برای client زنده هستند و باید با استفاده از view state , session و یا cookie حالت رو رد گیری کرد.

    یه کم سریع نوشتم و کمی گنگه اگه نیاز به توضیح بیشتر هست بگید تا بیشتر توضیح بدم.
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  5. #5
    کاربر دائمی آواتار Ehsan Rafsanjani
    تاریخ عضویت
    آبان 1384
    محل زندگی
    مشهد
    پست
    105
    خیلی ممنون که جوابمو دادین در حقیقت من یک صفحه دارم که موقعی که لود می شه یک تعداد کلید (N) مثلا با نام کلید1 توش ایجاد می شه و با کلیک هر کلید1 یک کلید دیگه ایجاد می شه با نام کلید2 و خود این کلید یک روال خاص خودشو داره که یک سری عملیات رو انجام می ده
    مشکل من دوتاست
    1- موقعی که به هر دلیلی صفحه رفرش می شه دکمه های خلق شده توسط دکمه 1 از بین رفته
    2- زیر روال کلید 2 اجرا نمیشه

    من رو ی این مشکل خیلی وقت گذاشتم
    توی MSdn خیلی گشتم یک مثال گذاشته بود که تا حدودی جوابمو داد ولی بازم مشکل دارم!?

    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    If ViewState("controlsadded") Is Nothing Then
    AddControls()
    End If
    End Sub

    Protected Overrides Sub LoadViewState(ByVal savedState As Object)
    MyBase.LoadViewState(savedState)
    If ViewState("controlsadded") = True Then
    AddControls()
    End If
    End Sub

    Private Sub AddControls()
    Dim dynamictextbox As New TextBox
    dynamictextbox.Text = "(Enter some text)"
    dynamictextbox.ID = "dynamictextbox"
    Dim dynamicbutton As New Button
    AddHandler dynamicbutton.Click, AddressOf dynamicbutton_Click
    dynamicbutton.Text = "Dynamic Button"
    Panel1.Controls.Add(dynamictextbox)
    Panel1.Controls.Add(New LiteralControl("<BR><BR>"))
    Panel1.Controls.Add(dynamicbutton)
    ViewState("controlsadded") = True
    End Sub

    Private Sub dynamicbutton_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs)
    Dim tb As TextBox
    tb = CType(Panel1.FindControl("dynamictextbox"), TextBox)
    Label1.Text = Server.HtmlEncode(tb.Text)
    End Sub



    مشکل من اینجاست که در صفحه من باید ابتدا کلید 1 در روال load خلق بشه بهد با کلیک کلید 1 کلید 2 تولید بشه و با کلیک کلید 2 مثلا روال test1 اجرا بشه
    اگه از دوستان کسی بتونه یک نمونه کد برام بزاره خیلی ممنون میشم

  6. #6
    به کد زیر توجه کنید:
    <%@ Page Language="vb" %>
    <HTML>
    <body>
    <form id="Form1" method="post" runat="server">
    <script runat="server">
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim c As Integer
    If Not IsNothing(viewstate("Dynamic_Button_Counts")) Then
    For c = 0 To viewstate("Dynamic_Button_Counts") - 1
    Dim nb As New Button
    nb.ID = "btn_" & c & "_ID"
    nb.Text = viewstate("btn_" & c & "_Text")
    AddHandler nb.Click, AddressOf Button_Click
    PlaceHolder.Controls.Add(nb)
    Next
    End If
    End Sub


    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Response.Write(CType(sender, Button).ID & " has been clicked. it's text is: " & CType(sender, Button).Text)
    End Sub

    Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    If IsNothing(viewstate("Dynamic_Button_Counts")) Then
    ViewState.Add("Dynamic_Button_Counts", "0")
    End If
    ViewState.Add("btn_" & ViewState("Dynamic_Button_Counts") & "_Text", txtText.Text)
    ViewState("Dynamic_Button_Counts") += 1

    Dim c As Integer = ViewState("Dynamic_Button_Counts") - 1
    Dim nb As New Button
    nb.ID = "btn_" & c & "_ID"
    nb.Text = viewstate("btn_" & c & "_Text")
    PlaceHolder.Controls.Add(nb)
    End Sub
    </script>
    <P><asp:textbox id="txtText" runat="server"></asp:textbox>
    <asp:Button id="cmdAdd" runat="server" Text="Add New" OnClick="cmdAdd_Click"></asp:Button></P>
    <P>
    <asp:PlaceHolder id="PlaceHolder" runat="server"></asp:PlaceHolder></P>
    </form>
    </body>
    </HTML>

    و اما چند نکته:
    1) کنترل ها رو توی page_load ایجاد می کنیم. چون هندلر اونها باید قبل از فراخوانی هندلر کنترل های صفحه به اون کنترل ها اضافه شده باشه.
    2) آخرین کنترل که پس از کلیک روی cmdAdd باید ساخته بشه توی روال cmdAdd_Click ساخته میشه. دقت کنید که اضافه شدن هندلر به کلید جدید لازم نیست. در این request رویداد کلیک از cmdAdd فراخوانی شده و می دانیم حتما روی کلید جدید کلیک نشده. اما چون در form_load به کنترل ها اضافه نشده اگر در این روال اون رو به کنترل ها اضافه نکنیم باید یکبار صفحه post back بشه تا کنترل جدید نمایش داده بشه.
    3) برای حفظ تعداد و text هر کلید جدید از viewstate کمک می گیریم
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  7. #7
    کاربر دائمی آواتار Ehsan Rafsanjani
    تاریخ عضویت
    آبان 1384
    محل زندگی
    مشهد
    پست
    105
    خیلی ممنون از راه حلی که نوشتین .............. در ادامه تکمیل مثال شما مطلبی در همین رابطه توی قسمت مقالات گذاشتم
    http://www.barnamenevis.org/sh...ad.php?t=34654

تاپیک های مشابه

  1. مشکل در AddHandler
    نوشته شده توسط Ehsan Rafsanjani در بخش VB.NET
    پاسخ: 2
    آخرین پست: شنبه 03 دی 1384, 13:09 عصر
  2. پاسخ: 3
    آخرین پست: سه شنبه 19 مهر 1384, 13:21 عصر
  3. یک سوال در مورد AddHandler
    نوشته شده توسط Hamedm در بخش VB.NET
    پاسخ: 2
    آخرین پست: شنبه 05 شهریور 1384, 19:54 عصر

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

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