Hello.
I am creating a class that wraps around a RadToolBar. The RadToolBar is dynamically created, with the exception that an empty toolbar is defined in the aspx code (example below). The class allows me to access buttons and a text box with simple class functions, properties, etc. Works nicely.
What I am stuck on is that I wish to handle button click events IN this class, allowing the new handlers to be then handled by the user in the .vb server-side code with the "handles" process (example idea, below). I know that I am on the track to figure this out, but I cannot seem to find the right solution.
So, here is the aspx:
And, here is the toolbar class which wraps around the toolbar:
Finally, here is the server-side code:
I am sure that in the CLASS, I handle the ToolBar OnClick event, and then determine WHICH RadButton was clicked, and raise an event, which has a CLASS HANDLER for that event. I would have that handler written in such a way as the user of the class can then create the handler that "HANDLES" tToolBarExample.OnClick event. This is my question: how do I do this inside my class? I seem to be close, but I am stuck trying to figure out the final bit.
Thank you
I am creating a class that wraps around a RadToolBar. The RadToolBar is dynamically created, with the exception that an empty toolbar is defined in the aspx code (example below). The class allows me to access buttons and a text box with simple class functions, properties, etc. Works nicely.
What I am stuck on is that I wish to handle button click events IN this class, allowing the new handlers to be then handled by the user in the .vb server-side code with the "handles" process (example idea, below). I know that I am on the track to figure this out, but I cannot seem to find the right solution.
So, here is the aspx:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="projects.aspx.vb" Inherits="EPD_WEB_APP.projects" %><%@ Import Namespace="EPD_WEB_APP" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Charting" TagPrefix="telerik" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>Test</title></head><body style="height: 830px; width: 630px"> <form id="form1" runat="server"> <div style="height: 821px; width: 1392px; margin-right: 0px;"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <br /> <telerik:RadToolBar ID="RadToolBar1" runat="server" Skin="Default" AutoPostBack="True"> </telerik:RadToolBar> <br /> <br /> <asp:Label ID="txtSearchFieldContents" runat="server" Text="Result:"></asp:Label> </div> </form></body></html>And, here is the toolbar class which wraps around the toolbar:
Public Class tToolBar Private m_RadToolBar As RadToolBar Private m_ThisPage As System.Web.UI.Page Private m_Skin As String Private m_SearchText As String Public Sub New(ByVal RadToolBar As RadToolBar) m_RadToolBar = RadToolBar m_ThisPage = HttpContext.Current.Handler m_SearchText = "" m_Skin = m_RadToolBar.Skin If Not m_ThisPage.IsPostBack Then Dim btnAdd As New RadToolBarButton() btnAdd.Text = "Add" btnAdd.Value = "1" btnAdd.ImageUrl = "Images/AddRecord.gif" 'btnAdd.CheckOnClick = True m_RadToolBar.Items.Add(btnAdd) Dim btnEdit As New RadToolBarButton() btnEdit.Text = "Edit" btnEdit.Value = "2" 'btnEdit.CheckOnClick = True btnEdit.ImageUrl = "Images/Edit.gif" m_RadToolBar.Items.Add(btnEdit) Dim buttonS1 As New RadToolBarButton() buttonS1.IsSeparator = True m_RadToolBar.Items.Add(buttonS1) Dim btnSave As New RadToolBarButton() btnSave.Text = "Save" btnSave.Value = "3" btnSave.ImageUrl = "Images/Save.gif" m_RadToolBar.Items.Add(btnSave) Dim btnCancel As New RadToolBarButton() btnCancel.Text = "Cancel" btnCancel.Value = "4" btnCancel.ImageUrl = "Images/Cancel.gif" m_RadToolBar.Items.Add(btnCancel) Dim btnDelete As New RadToolBarButton() btnDelete.Text = "Delete" btnDelete.Value = "5" btnDelete.ImageUrl = "Images/deletex.gif" m_RadToolBar.Items.Add(btnDelete) Dim buttonS2 As New RadToolBarButton() buttonS2.IsSeparator = True m_RadToolBar.Items.Add(buttonS2) Dim ddSearchBy As New RadToolBarSplitButton() ddSearchBy.Text = "Search By..." ddSearchBy.ToolTip = "Select the type of search." Dim btnUPC As New RadToolBarButton() btnUPC.ToolTip = "Select the type of search." btnUPC.Text = "UPC" btnUPC.Value = "UPC" Dim btnDesc As New RadToolBarButton() btnDesc.ToolTip = "Select the type of search." btnDesc.Text = "Description" btnDesc.Value = "DESC" ddSearchBy.Buttons.Add(btnUPC) ddSearchBy.Buttons.Add(btnDesc) m_RadToolBar.Items.Add(ddSearchBy) 'Dim splitButton As New RadToolBarSplitButton() Dim btnSearchByTxt As New RadToolBarButton() btnSearchByTxt.Text = "Search for?" m_RadToolBar.Items.Add(btnSearchByTxt) Dim btnSearch As New RadToolBarButton() btnSearch.Text = "Search" btnSearch.Value = "6" btnSearch.ImageUrl = "Images/search.gif" m_RadToolBar.Items.Add(btnSearch) Dim buttonS3 As New RadToolBarButton() buttonS3.IsSeparator = True m_RadToolBar.Items.Add(buttonS3) Dim btnFirst As New RadToolBarButton() btnFirst.Text = "First" btnFirst.Value = "8" btnFirst.ImageUrl = "Images/blue-first-16.gif" m_RadToolBar.Items.Add(btnFirst) Dim btnPrev As New RadToolBarButton() btnPrev.Text = "Previous" btnPrev.Value = "9" btnPrev.ImageUrl = "Images/blue-prev-16.gif" m_RadToolBar.Items.Add(btnPrev) Dim btnNext As New RadToolBarButton() btnNext.Text = "Next" btnNext.Value = "10" btnNext.ImageUrl = "Images/blue-next-16.gif" m_RadToolBar.Items.Add(btnNext) Dim btnLast As New RadToolBarButton() btnLast.Text = "Last" btnLast.Value = "11" btnLast.ImageUrl = "Images/blue-last-16.gif" m_RadToolBar.Items.Add(btnLast) Disable() End If InstantiateSearch() End Sub Public Property Skin() As String Get Return m_Skin End Get Set(ByVal value As String) m_Skin = value m_RadToolBar.Skin = m_Skin End Set End Property Public Property SearchText() As String Get m_SearchText = "" Dim textItem As RadToolBarItem = m_RadToolBar.FindItemByText("Search for?") Dim textBox As TextBox = CType(textItem.FindControl("TextBox"), TextBox) m_SearchText = textBox.Text Return m_SearchText End Get Set(ByVal value As String) m_SearchText = value Dim textItem As RadToolBarItem = m_RadToolBar.FindItemByText("Search for?") Dim textBox As TextBox = CType(textItem.FindControl("TextBox"), TextBox) textBox.Text = m_SearchText End Set End Property Public Sub InstantiateSearch() Dim searchTemplate As New TextBoxSearchTemplate() Dim textSearchItem As RadToolBarItem = m_RadToolBar.FindItemByText("Search for?") If TypeOf textSearchItem Is RadToolBarButton Then searchTemplate.InstantiateIn(textSearchItem) End If m_RadToolBar.DataBind() End Sub Public Sub Disable(Optional ByVal scope As String = "") If scope = "All" Or scope = "" Then m_RadToolBar.Enabled = False End If ' other options may exist... End Sub Public Sub Enable(Optional ByRef scope As String = "") If scope = "All" Or scope = "" Then m_RadToolBar.Enabled = True End If ' other options may exist... End Sub 'Protected Sub SearchButton_Click(ByVal sender As Object, ByVal e As EventArgs) '----- some way of handling the bar's click, and then inside, which button was clicked, like the "Search" button. '----- this needs to be then handled by the user who is using the class with a tToolBar.OnClick something... 'End Sub Private Class TextBoxSearchTemplate Implements ITemplate Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn Dim txtbox1 As New TextBox() txtbox1.ID = "TextBox" txtbox1.Text = "" txtbox1.Font.Size = 10 txtbox1.Font.Bold = False AddHandler txtbox1.DataBinding, AddressOf txtbox1_DataBinding container.Controls.Add(txtbox1) End Sub Private Sub txtbox1_DataBinding(ByVal sender As Object, ByVal e As EventArgs) Dim target As TextBox = DirectCast(sender, TextBox) Dim button As RadToolBarButton = DirectCast(target.BindingContainer, RadToolBarButton) 'Dim buttonText As String = DirectCast(DataBinder.Eval(button, "Text"), String) 'target.Text = buttonText target.Text = "" target.ToolTip = "What do you wish to search for?" End Sub End ClassEnd ClassFinally, here is the server-side code:
Public Class projects Inherits System.Web.UI.Page Private formToolBar As tToolBar Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load formToolBar = New tToolBar(RadToolBar1) formToolBar.Enable() If Not Page.IsPostBack Then 'formToolBar.Skin = "Windows7" Else End If End Sub Protected Sub RadToolBar1_ButtonClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadToolBarEventArgs) Handles RadToolBar1.ButtonClick ' the following just tests whether or not I can access the text from the search textbox. formToolBar.Skin = formToolBar.SearchText txtSearchFieldContents.Text = "Skin: " & formToolBar.Skin ' what I need is a way in the CLASS to dispatch (fire) events per button, ' so that I can have individual handlers in this VB.NET code. ' That way, I don't have to do fancy footwork in the VB.NET, but do all ' the dirty work in the CLASS, and just let the user ' here deal with the inner button. End SubEnd ClassI am sure that in the CLASS, I handle the ToolBar OnClick event, and then determine WHICH RadButton was clicked, and raise an event, which has a CLASS HANDLER for that event. I would have that handler written in such a way as the user of the class can then create the handler that "HANDLES" tToolBarExample.OnClick event. This is my question: how do I do this inside my class? I seem to be close, but I am stuck trying to figure out the final bit.
Thank you