الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

How To Add ImageButton On RunTime

بدأه VB6.NET في 4 ديسمبر 2010 · 8 رد · 798 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

أخواني الكرام قمت بإضافة زر صورة كما يلي

dim IMB as new ImageButton

كيف لي أن أضع التعليمات التي يجب أن ينفذها الزر عند الضغط عليه

كما أنني عندما أقوم بإضافة زر على الصفحة بسحبه على الصفحة من شريط الأدوات الجاني فإن الضغط عليه يؤدي إلى إعادة تحمبل الصفحة و بالتالي تنفيذ تعليمات Load Event كيف لي أن أحل هذين الموضوعين

أرجوا المساعدة و شكراً جزيلاً

#2
Protected Overrides Sub OnInit(e As EventArgs)
	MyBase.OnInit(e)
	Me.RenderImageButtons()
End Sub
Private Sub RenderImageButtons()

	Dim img As New ImageButton()
	img.ID = "img"
	img.AlternateText = "ImageButton"
	img.Command += New CommandEventHandler(img_Command)
	img.CommandName = "select"
	img.CommandArgument = "~/xyz.aspx"
	img.Width = Unit.Percentage(100.0)
	Me.phButtons.Controls.Add(img)
End Sub

<div class="LeftColLinkImage" runat="server" id="maindiv">
    <asp:PlaceHolder runat="server" ID="phButtons" />
</div>

اما بالنسبة لإعادة التحميل فهذه حلها بتقنية AJAX

/index.php?showtopic=220150

تم تعديل هذه المشاركة بواسطة مبرمج القاعده في 4 ديسمبر 2010 في 22:14

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#3

أخي الكريم أنا شاكر لك مساعدتك لي ... و لكنني مازلت أواجه بعض المشاكل ... عندما أطبق التعليمات التي كتبتها لي تظهر لي الرسالة التالية

هل لك أن تشرح لي قليلاً عن الموضوع .... بالنسبة للمثال الآخر فهو مكتوب باللغة C فلم أستطع الاستفادة منه

شاكراً لك لطفك

Server Error in '/New Folder' Application.

________________________________________

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: BC32022: 'Public Event Command(sender As Object, e As System.Web.UI.WebControls.CommandEventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

Source Error:

Line 20: img.ID = "img"

Line 21: img.AlternateText = "ImageButton"

Line 22: img.Command = New CommandEventHandler(img_command)

Line 23: img.CommandName = "select"

Line 24: img.CommandArgument = "~/xyz.aspx"

هذا هو الكود الذي و ضعته ... و شكراً

Protected Overrides Sub OnInit(ByVal e As EventArgs)

MyBase.OnInit(e)

Me.RenderImageButtons()

End Sub

Private Sub RenderImageButtons()

Dim img As New ImageButton()

img.ID = "img"

img.AlternateText = "ImageButton"

img.Command = New CommandEventHandler(img_command)

img.CommandName = "select"

img.CommandArgument = "~/xyz.aspx"

img.Width = Unit.Percentage(100.0)

Me.phButtons.Controls.Add(img)

End Sub

#4

السلام عليكم ورحمة الله

الفكرة كلها تأتى فى إنشاء Instance من ImageButton ومن ثم التعديل فى خصائصها ومن بينهم الإحداث وفى النهاية إضافتها إلى الصفحة و الرد السابق ينبغى ان يعمل معك إلا انه ينقصه الحدث والذى أظنك أخطأت فى كتابته :

Protected Sub Page_Load(sender As Object, e As EventArgs)
	Dim imbtn As New ImageButton()
	imbtn.ImageUrl = "~/JqueryImageSliderUsingDatabasemy.PNG"
	imbtn.CommandName = "some"
	imbtn.Command += New CommandEventHandler(AddressOf imbtn_Command)
	imbtn.Click += New ImageClickEventHandler(AddressOf imbtn_Click)
	form1.Controls.Add(imbtn)
End Sub

Private Sub imbtn_Click(sender As Object, e As ImageClickEventArgs)
	Response.Write(Convert.ToString(e.X) & " :: " & Convert.ToString(e.Y))
End Sub

Private Sub imbtn_Command(sender As Object, e As CommandEventArgs)
	Response.Write("<br/>")
	Response.Write(e.CommandName)
End Sub

تم تعديل هذه المشاركة بواسطة Ahmed Moosa في 5 ديسمبر 2010 في 20:52

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#5

أخوتي الكرام أشكر كم اهتمامكم ....

لقد جربت الكود الجدبد لكنه مازال يعطي نفس رسالة الخطأ و لا أدري لماذا ... لكنني بعد محاولات طويلة توصلت للكود التالي و قد قام بالنتيجة بشكل جيد جداً

Partial Class _Default

Inherits System.Web.UI.Page

Public Event click As ImageClickEventHandler

Dim Handler As New ImageClickEventHandler(AddressOf IMG_CLICK)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

Dim IMGBUTTON As New ImageButton

AddHandler IMGBUTTON.Click, Handler

Table1.Controls.Add(New TableRow)

form1.Controls.Add(IMGBUTTON)

Table1.Rows(0).Controls.Add(New TableCell)

Table1.Rows(0).Cells(0).Controls.Add(IMGBUTTON)

MsgBox("hey")

End Sub

Private Sub IMG_CLICK(ByVal sender As Object, ByVal e As ImageClickEventArgs)

MsgBox("hey")

End Sub

Protected Sub Page_click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Me.click

MsgBox("Click")

End Sub

End Class

المهم الآن ... أنني مازلت أواجه مشكلة عند الضغط على الزر أن الصفحة تقوم بتحميل ذاتها من جديد و بالتالي التعلميات البرمجية في الحدث Page_Load تتكرر .... و أنا لا أريد ذلك أن يتم ... هل من الممكن أن يكون هناك مكان لوضع كود بحيث ينفذ مرة واحدة عند الدخول إلى الصفحة .... غير الحدث Page_load حتى نتجنب تكرار التعليمات عند الضغط على الأزرار ....

شاكراً لطفكم الكبير

#6

السلام عليكم

قبل كل شئ :

- نحن هنا لنعطيك التوجية وأنت تكمل فحاول مراراً وتكراراً وكم أعجبنى سائل فى منتدى أوربى يقول فى بداية سؤاله "بحثت لمدة 36 ساعة قبل أن أضع سؤالى " وهنا مع اول إعتراض( Exception ) يحدث أمور غربية .

إنسى الكلام السابق ودعنا نتعلم شئ جديداَ :

فى البداية :

- أفضل مكان لإنشاء اداوت وقت التشغيل هو حدث Page_Init ولذلك أسبابه ولعل اهمها الحفاظ على الحالة الخاصة بالأداة والتى تسمى View State .

- كل أداة يتم إنشائها أثناء وقت التشغيل لابد أن يعاد إنشائها فى كل مرة ترحل الصفحة وتعود من وإلى الـServer . وفى واقع الإمر الصفحة بكاملها اى بجميع أدواتها ما تم إنشائه وقت التشغيل وغيره اى ما كان موجوداً من قبل "يعاد إنشائه فى كل جولة (كما يسمونها الإوربيون) من وإلى الخادم (server) . بصيغة أخرى :يعاد إنشائهم كل مرة يحدث فيها PostBack " وعليه التالى

- يجب إعادة إنشاء ادواتك فى كل مرة يحدث فيها PostBack وإضافتها للصفحة .

ماذا سيحدث إن خالفت ذلك : لن تجد هذة الأدوات فى المرة القادمة عندما تعود إلى الصفحة أى عند الصغط مثلاُ على Button تذهب للخادم وتعود فتجد الإداة قد إختفت .

- الكود الذى تم إعطائه لك فى الردين السابقين من المتحدث والأخ الفاضل الكريم "مبرمج القاعدة " كان عليهم أن يعملان معك . واظنك تستخدم إصدار غير حديث (لاحظت ذلك من الكود أرجوا أن أكون محقاً ) .

نعود لسؤلك :

- إنت سألت سؤال ربما لن يفيدك معرفة إجابته الإن ولكن ستفيدك فيما بعد . وهو " هل هناك مكان يمكن أن أضع فيه الكود ويتم تنفيذه مره واحدة فقط "

الحقيقة الإجابة والسؤال ليس موقعهما الآن فلا تحاول تطبيقه فى سؤالك ,ولكن إعرف التالى :

- الصفحة فى بداية تحميلها يتم طلبها بإستحدام get ويتم تنفيذ أحداث الصفحة بما فيها من أكواد وهى ما تسمى Page Life Cycle ومنهم الحدثين السابقين Init و Load ويكتبان إفتراصياً على الهيئة التى لاشك رأيتها Page_EventName وبهما متغيرين أو نسميهما بالتسمية الصحيحة Arguments وهما إثنين أحدهما وهو الإول ويتحكم فى بيانات الراسل وهو الإداة المتسبة فى إستدعاء هذا الحدث ونجد ان التسمية الإفتراضية تخدم المعنى والهدف وتسميه Sender والأخر وهو ما يحمل بيانات عن الحدث نفسه وما يتعلق به من خصائص ودوال ولابد أن تتبع هذة الطريقة فى كتابة الإحداث وتسمى عند الغرب بـ the same signature . وهى كالتالى :

 protected void Page_Load(object sender, EventArgs e)
    {

    }

فعند طلب الصفحة لآول مرة يكون الطلب بـ Get وكل ما يلى ذلك من طلب للصفحة يكون بــPost ولذلك فمن الطبيعى عند تنفيذ أى أوامر لا نريد تنفيذها إلا مرة واحدة ان نضعها كما يلى :

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
// Here ................
        }
    }

وهنا نكشف هل تم طلب الصفحة بغير PostBack وتقراً هكذا : Not IsPostback وهكذا تكتب فى vb .

عغواً أطلت عليك ,فى أمان الله وأرجو من الله لك التوفيق .

تم تعديل هذه المشاركة بواسطة Ahmed Moosa في 6 ديسمبر 2010 في 17:57

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#7

بالفعل أخي الكريم أنا استخدم نسخة قديمة .... و هذا هو سبب المشكلة ...

و بالنسبة للـ PostBack فقد جربتها و تعمل بشكل جيد جداً ... أشكرك أخي و أشكركم أخوتي على المساعدة و على وقتكم الذي منحتوني اياه و انشاله نكافيكم بالأفراح

و السلام عليكم و رحمة الله

#8

سؤال أخير أخواني

عند رفع الموقع على السيرفر تظهر رسالة خطأ وهي

Server Error in '/' Application.

--------------------------------------------------------------------------------

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster

هل هي من أنني استخدم نسخة قديمة .... و ماهو الحل علماً أنها تحدث فقط عند وجود الأداة DataGridView و أن الخطأ لايظهر عند بيئة التصميم فأرجو المساعدة و شكراً

#9
VB6.NET كتب:

سؤال أخير أخواني

عند رفع الموقع على السيرفر تظهر رسالة خطأ وهي

Server Error in '/' Application.

--------------------------------------------------------------------------------

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster

هل هي من أنني استخدم نسخة قديمة .... و ماهو الحل علماً أنها تحدث فقط عند وجود الأداة DataGridView و أن الخطأ لايظهر عند بيئة التصميم فأرجو المساعدة و شكراً

السلام عليكم

هذة المشكلة تكررت كثيراً , وتم السؤال عنها فى المنتدى الرسمى كثيراً , إليك هذا الموضوع : http://forums.asp.net/t/955145.aspx?PageIndex=4

أرجوا ان تنتفع منهم وتجد به حلاً .

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

مواضيع مشابهة