PDA

View Full Version : سوال: چرا EventHandler که ساختم اجرا نمیشه؟؟ کمک!!



Parham.D
پنج شنبه 29 مرداد 1388, 09:28 صبح
سلام دوستان و اساتید گرام.

با کد نویسی یک کنترل Button ساختم که رویداد Click هم به آن اضافه کردم. کنترل ساخته میشه، نمایش داده میشه، ولی رویداد Click آن اجرا نمیشه. چرا؟؟!!

کدها را گذاشتم . . .





Public Void MakeNewButton()
{
Button NewButton = new Button();

NewButton.ID = "btn";
NewButton.Text = "Run";
NewButton.Click += new EventHandler(this.NewButton_Click);

Panel1.Controls.Add(new LiteralControl("<br />"));
Panel1.Controls.Add(NewButton);

}

protected void NewButton_Click(object sender, EventArgs e)
{
label.text= "text"
}

Al.Nop
پنج شنبه 29 مرداد 1388, 13:53 عصر
سلام:لبخندساده:

رخداد page _Load یا ... مثل کد زیر میشه :


private void Page_Load(object sender, System.EventArgs e)
{
Button btn = new Button();
btn.ID = "Button1";
btn.Click += new EventHandler(btn_Click);
btn.Text = "Testing";
Panel1.Controls.Add(btn);
}

و در پایان :


protected void btn_Click(object sender, EventArgs e)
{
Response.Write("Hello Al.NOP");
}

و تمام کد برای VB کار ها :



Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim btn As New Button()
btn.ID = "Button1"
AddHandler btn.Click, AddressOf btn_Click
btn.Text = "Testing"
Panel1.Controls.Add(btn)
End Sub
Protected Sub btn_Click(ByVal sender As Object, ByVal e As EventArgs)
Response.Write("Hello Al.NOP")
End Sub


موفق باشید :چشمک:

Parham.D
پنج شنبه 29 مرداد 1388, 19:57 عصر
سلام AL. عصر بخیر!!

خب کد من با شما چه فرقی با هم داشت؟؟ یعنی حتما باید در Page_Load نوشته بشه؟؟ داستان این Response جی هست؟؟!!

Al.Nop
جمعه 30 مرداد 1388, 00:10 صبح
سلام .:لبخندساده:


خب کد من با شما چه فرقی با هم داشت؟؟

شما به علتی کاملا نامعلوم سعی در پیچاندن کد داشتید . در حالیکه کد برای همچین کار ابتدایی ای باید مختصر و مفید نوشته شود .


یعنی حتما باید در Page_Load نوشته بشه؟؟

خیر ، شما پست من رو کامل نخوندید که :


رخداد page _Load یا ... مثل کد زیر میشه :

پس در هر رخدادی میشه ، ولی باید اون رخداد رو در Page_Load فراخوانی کرد ( کاری که شما نکردید و سبب اشتباه شدن کد شما شده )


داستان این Response جی هست؟؟!!

یکی بود یکی نبود ، فقط برای چک کردن درست بودن برنامه بود !

موفق باشید:چشمک:

Parham.D
یک شنبه 01 شهریور 1388, 10:37 صبح
معنی این جمله دقیقا چی هست AL عزیز. "پس در هر رخدادی میشه ، ولی باید اون رخداد رو در Page_Load فراخوانی کرد ( کاری که شما نکردید و سبب اشتباه شدن کد شما شده "

AL عزیز و سایر دوستان، من باز هم متوجه نشدم. کد شما با کد من که فرقی نداشت. وقتی کل کد تعریف کنترل جدید را در Page_Load میزارم کار میکنه. ولی من این را نمی خوام!! نمی خوام در زمان Load صفحه یک کنترل ساخته بشه. من میخوام مثلا وقتی کاربر دکمه‏ای را کلیلک میکنه کد ساخته بشه. که البته ساخته میشه، ولی رویداد کلیک که براش گذاشتم اجرا نمیشه.


لطفا کمک کنید، گیج شدم . . . .

Parham.D
یک شنبه 01 شهریور 1388, 13:27 عصر
کسی نیست کمک کنه؟؟؟!!! :افسرده:

صابر
یک شنبه 01 شهریور 1388, 16:02 عصر
سلام،
در Page Life Cycle متدهای Init و Page_Load قبل از Event Handling هستند، بنابراین وقتی یک کنترل ایجاد می‌کنید باید در آنجا متد مربوط به Event را مشخص کنید.
وقتی شما یک متد به نام MakeNewButton نوشتید و آن را احتمالاً در کلیک یک دکمه دیگر صدا می‌زند، این اتفاقات بعد از Event Handling مربوط به Page اتفاق می‌افتد و بلااثر می‌شود.

برای اطلاعات بیشتر در مورد ASP.Net Page Life Cycle:
http://69.10.233.10/KB/aspnet/ASPNET_Page_Lifecycle.aspx

Parham.D
یک شنبه 01 شهریور 1388, 17:06 عصر
صابر عزیز ممنون از توجه شما. خب حالا چه باید کرد؟!! من هر چقدر سرچ کردن فقط توضیح دیدم که میگن همچین چیزی هست!! ولی پیدا نکردم که باید براش چکار کرد!!؟؟ شما میتونی یک نمونه کد کوچیک برام بزاری که یک رویداد اضافه کنه؟؟ لطفا . . .

صابر
یک شنبه 01 شهریور 1388, 17:25 عصر
خواهش می‌کنم.
اگر مسئله‌ای که وجود دارد را کامل توضیح دهید، که چرا می‌خواهید این کار را کنید، دقیق‌تر می‌توان نظر داد.
با این شرایط، خب در Page_Load چک کنید اگر در صفحه دکمه‌ای به نام btn وجود دارد، click event را به آن assign کنید.

Parham.D
یک شنبه 01 شهریور 1388, 17:45 عصر
جریان از این قرار است :همانطور که شما حدس زدید. بعد از کلیک یک دکمه یک متد صدا زده میشود و در آن متد یک Lable, Text box و button ساخته میشود. تمام این کنترل ها ساخته میشوند ولی بعد از کلیک بر روی کنترل button که به صورت Runtime ساخته شده رویداد Click کار نمیکند و کنترل ها ی که به صورت Runtime ساخته شده نا پدید میشوند.

واضح توضیح دادم؟؟!!

Parham.D
یک شنبه 01 شهریور 1388, 17:56 عصر
من کاری که شما گفتید انجام دادم ولی کار نکرد! در Page_Load چگ کردم و btn را پیدا کرد، اما btn.Click وجود نداره که Event را به آن پاس دهم. جای از کار را خراب کردم.


خیلی خیلی ممنون . . .

صابر
یک شنبه 01 شهریور 1388, 18:02 عصر
باید به نحوی این کنترل‌ها را در Page_Load بسازید. مثلاً یک راه حل این است که هروقت کاربر روی دکمه شما (که اسمش را Run گذاشتید) کلیک کرد، در یک ViewState یک counter به اضافه یک شود.
مثلاً اگر سه بار کلیک شد روی آن دکمه، مقدار آن ViewState برابر با 3 شود.

در Page_Load یک حلقه بنویسید که به تعداد مقدار درون آن ViewState کنترل‌های شما را ایجاد، اضافه و event کلیک دکمه‌تان را set کند.

Parham.D
یک شنبه 01 شهریور 1388, 18:08 عصر
پس راه حل اساسی نداره؟؟!!!!!!!!!! باشه تست میکنم . . . . :افسرده:

آقا خیلی لطف کردی . . . یک دنیا ممنون . . . امیدوارم یک جایی تو این فروم بدرد شما بخورم!!!

صابر
یک شنبه 01 شهریور 1388, 18:10 عصر
پس راه حل اساسی نداره؟؟!!!!!!!!!! باشه تست میکنم . . . . :افسرده:

آقا خیلی لطف کردی . . . یک دنیا ممنون . . . امیدوارم یک جایی تو این فروم بدرد شما بخورم!!!

خواهش می‌کنم، البته به نظر من این راه حل اصولی و خوبی‌است و غیر اساسی نیست :)