65.9K
CodeProject 正在变化。 阅读更多。
Home

VB.NET 和 C# 中的服务器端消息框

2004年11月23日

4分钟阅读

viewsIcon

278287

downloadIcon

4321

一个自定义控件 - VB.NET 和 C# 中的服务器端消息框。

引言

使用 JavaScript,您可以在页面加载时或将页面内容渲染到浏览器后访问对话框。在通过 JavaScript 处理功能时,无法获得用户的确认。要实现这一点,您必须使用服务器端消息框。服务器端消息框提供了一个选项,可以根据某些功能检查来获得用户的确认。在获得用户点击确认后,它将根据用户的选择来处理功能。

消息框在对话框中显示一条消息,等待用户点击按钮,并返回一个指示用户点击了哪个按钮的值。根据用户的选择,可以执行要执行的功能。

与 Windows 应用程序相比,在基于 Web 的解决方案中实现这一点有点困难。同时,您可以使用 JavaScript 来实现。JavaScript 实现存在一些限制,例如无法自定义消息框中的按钮。

在本文中,我不会详细解释我的实现。在这里,我提供了实现代码。希望您能无障碍地理解实现。

实现我的 DLL 后,您将获得一个如下所示的消息框

此框的特性

  1. 您可以动态更改标题文本。
  2. 您可以动态更改标题字体。
  3. 您可以动态更改标题字体大小。
  4. 您可以动态更改标题字体样式。
  5. 您可以动态更改标题字体名称。
  6. 您可以动态更改标题背景颜色。
  7. 您可以动态更改消息文本。
  8. 您可以动态更改消息字体。
  9. 您可以动态更改消息字体大小。
  10. 您可以动态更改消息字体样式。
  11. 您可以动态更改消息字体名称。
  12. 您可以动态更改图像。
  13. 您可以动态更改图像边框。
  14. 您可以动态更改图像边框颜色。
  15. 您可以动态更改消息框背景颜色。
  16. 您可以动态更改消息框边框颜色、大小。
  17. 您可以动态更改所需的按钮,如“是 / 否 / 取消 / 忽略”。
  18. 您还可以动态更改按钮的前景色、边框、样式等。

当消息框显示时,所有表单控件都处于禁用状态,反之亦然。您甚至可以使用鼠标拖动消息框。

DLL 实现

转到解决方案资源管理器,点击*添加引用*,然后指定包含消息框控件类实现的 DLL 文件的路径。

请遵循以下步骤

  1. 在 Web 窗体代码隐藏文件的顶部,添加以下代码行

    VB.NET

    Imports NewMsgBoxAsp.Holool.Anwar.Web.Controls.UI

    C#

    Using NewMsgBoxAsp.Holool.Anwar.Web.Controls.UI;
  2. 创建 MessageBox 类的实例,以访问其属性和方法

    VB.NET

    Dim NBox As MessageBox = New MessageBox

    C#

    MessageBox NBox = New MessageBox();
  3. 将一个 ASP Button 控件拖放到 Web 窗体上,并粘贴以下代码

    VB.NET

    Private Sub Button1_Click(ByVal sender As System.Object, _
               ByVal e As System.EventArgs) Handles Button1.Click
        NBox.SetEnabledAll(False, Me)
        NBox.MB_Button = 3
        NBox.MB_Top = 50
        NBox.MB_Left = 150
        NBox.MB_Width = 300
        NBox.MB_Height = 150
        NBox.MB_ButtonWidth = 60
        NBox.MB_IDYes = "yesno"
        NBox.MB_IDNo = "yesno"
        NBox.MB_IDCancel = "yesno"
        NBox.MB_ButtonYesText = "Yes"
        NBox.MB_ButtonNoText = "No"
        NBox.MB_ButtonCancelText = "Cancel"
        NBox.MB_Title = "Uer Custom Title Here... .."
        NBox.MB_Message = "Uer Custom Message Here... .."
        NBox.MB_MessageFontSize = 10
        NBox.MB_Image = "d.gif"
    
        NBox.MB_TitleBarColor = System.Drawing.Color.Orange
        NBox.MB_BoxColor = System.Drawing.Color.LightSeaGreen
        NBox.MB_BoxShadowColor = System.Drawing.Color.LightSalmon
        NBox.MB_TitleFontColor = System.Drawing.Color.Maroon
        NBox.MB_TitleFontName = "Ariel"
        NBox.MB_TitleFontBold = True
        NBox.MB_ImageBorderSize = 5
        NBox.MB_ImageBorderColor = System.Drawing.Color.Red
        NBox.MB_ImageBorderStyle = BorderStyle.Double
    
        NBox.MB_ButtonBackColor = System.Drawing.Color.Green
        NBox.MB_ButtonBorderColor = System.Drawing.Color.Red
        NBox.MB_ButtonBorderWidth = 4
        NBox.MB_ButtonBorderStyle = BorderStyle.Double
        NBox.MB_ButtonForeColor = System.Drawing.Color.Yellow
        NBox.MB_ButtonFontBold = True
        NBox.MB_BorderWidth = 5
        NBox.MB_BorderStyle = BorderStyle.Double
        NBox.MB_BorderColor = System.Drawing.Color.Honeydew
        Panel1.Controls.Add(NBox)
    End Sub

    C#

    private void Button1_Click(object sender, System.EventArgs e)
    {
        MessageBox myBox = new MessageBox();
        myBox.MB_Button = 3;
        myBox.MB_Width = 300;
        myBox.MB_Height = 150;
        myBox.MB_ButtonWidth = 60;
        myBox.MB_IDYes = "yesno";
        myBox.MB_IDNo = "yesno";
        myBox.MB_IDCancel = "yesno";
        myBox.MB_ButtonYesText = "Yes";
        myBox.MB_ButtonNoText = "No";
        myBox.MB_ButtonCancelText = "Cancel";
        myBox.MB_Title = "Uer Custom Title Here... ..";
        myBox.MB_Message = "Uer Custom Message Here... ..";
        myBox.MB_MessageFontSize = 10;
        myBox.MB_Image = "d.gif";
        myBox.MB_TitleBarColor = System.Drawing.Color.Orange;
        myBox.MB_BoxColor = System.Drawing.Color.LightSeaGreen;
        myBox.MB_BoxShadowColor = System.Drawing.Color.Violet;
        myBox.MB_TitleFontColor = System.Drawing.Color.Red;
        myBox.MB_TitleFontName = "Ariel";
        myBox.MB_ImageBorderSize = 5;
        myBox.MB_ImageBorderColor = System.Drawing.Color.DarkGreen;
        myBox.MB_ImageBorderStyle = BorderStyle.Double;
        myBox.MB_ButtonBackColor = System.Drawing.Color.Green;
        myBox.MB_ButtonBorderColor = System.Drawing.Color.Red;
        myBox.MB_ButtonBorderWidth = 4;
        myBox.MB_ButtonBorderStyle = BorderStyle.Double;
        myBox.MB_ButtonForeColor = System.Drawing.Color.Yellow;
        myBox.MB_BorderWidth = 5;
        myBox.MB_BorderStyle = BorderStyle.Double;
        myBox.MB_BorderColor = System.Drawing.Color.Honeydew;
        Panel1.Controls.Add(myBox);
    }

    因此,当您单击按钮时,将显示消息框。但是,还有一些工作要做。通常,在 Windows 消息框中,用户可以将消息拖到屏幕的任何位置。这在使用服务器控件时是不可能的。为了实现此功能,我设计了另一个名为 WebControlDraggerS 的自定义控件。

    这个不可见的控件可以用来在运行时将消息框拖到屏幕的任何部分,就像任何其他经典的 Windows 消息框一样。

    要使用此控件,请右键单击工具箱,选择“添加/新项”,然后指定 WebControlDraggerS DLL 文件的路径。一旦控件出现在工具箱中,将其拖放到窗体上。

    接下来,将以下方法 ControlToDragPanel1_PreRender 粘贴到代码隐藏文件中

    Private Sub ControlToDrag(ByVal ctrl As Control)
     ' Define the JavaScript function for the specified control.
     Dim focusScript As String = " <SCRIPT language='javascript'>" & _
        "Drag.init(document.getElementById('" + ctrl.ClientID & "'), _
        null, null, null, null, null, false, false); </SCRIPT>"
    
     ' Add the JavaScript code to the page.
     Page.RegisterStartupScript("FocusScript", focusScript)
    End Sub
    
    Private Sub Panel1_PreRender(ByVal sender As Object, _
           ByVal e As System.EventArgs) Handles Panel1.PreRender
     ControlToDrag(Panel1)
    End Sub

    在这里,Panel1 是窗体上放置的 ASP PanelID,它充当自定义 Web 消息框的容器。

    最后,在代码隐藏文件中添加以下子例程,并在 Page_Load 事件中调用它。

    VB.NET

    Private Sub CheckYesNo()
       If Request.Form("yesno") = "Yes" Then
            Response.Write("Button - Yes - Selected")
       ElseIf Request.Form("yesno") = "No" Then
            Response.Write("Button - No - Selected")
       ElseIf Request.Form("yesno") = "Cancel" Then
            Response.Write("Button - Cancel - Selected")
       End If
       NBox.SetEnabledAll(True, Me)
    End Sub

    C#

    public void CheckYesNo()
    {
        if (this.Request.Form["yesno"]== "Yes")
            Response.Write("Button - Yes - Selected");
        elseif (this.Request.Form["yesno"]== "No")
            Response.Write("Button - No - Selected");
        elseif (this.Request.Form["yesno"]=="Cancel")
            Response.Write("Button - Cancel - Selected");
        myBox.SetEnabledAll(true,this);
    }

增强功能

这个 MessageBox 控件的工作方式类似于经典的 Windows MsgBox,并且包含所有属性和事件。它不需要任何增强。实际上,该消息框是使用 VB.NET(Web 应用程序)开发的。现在我正尝试将其转换为 C#,以进一步提高其性能并将 DLL 合并到一个中。

使用代码 (DLLs)

我还将此 MessageBox 功能的完整演示 ZIP 文件放在一个单独的 ZIP 文件中:一个功能齐全的数据录入表单,该表单与服务层功能交互以执行 DML 事务。这两个 DLL 文件可以在同一个项目文件夹中找到(NewMessageBox.dllWebControlDragerS.dll)。您可以检查消息框的使用情况,以添加和保存新记录。您可以解压缩 ZIP 文件并使用它。

服务器端消息框的不同视图

愉快地实例化..!!

摇滚吧…… ………………

再见。

© . All rights reserved.