教你做一个可以弹出确认对话框的自定义Web服务器控件ConfirmButton

不少组件文章 http://cn.codeof.com/articles/.net/com-controls-development/2/

 

教你做一个可以弹出确认对话框的自定义Web服务器控件ConfirmButton

作者: 未知
日期:

<script src="http://4.adbrite.com/mb/text_group.php?sid=91197&br=1&dk=6170706c7920666f7220612063726564697420636172645f335f32" type="text/javascript"></script> www.ZTechShop.net
SUSE LINUX 10.1 Sale - $9.99. Linux & BSD distributions delivered!

Globe7 - Free Download!
Phone + Chat + Radio + TV Free! Download Now!

Globe7 - Free !
Call Free, Chat Free and Watch TV for Free!

经常在论坛里看到类似这样的问题:“…如何在点击删除按钮的时候弹出个确认删除对话框”。

下面我们来自己写一个这样的自定义Web服务器控件!

思路如下:

继承System.Web.UI.WebControls.Button控件

增加一个属性“ConfirmMessage”来表示弹出确认框上面的提示信息。

在服务器控件呈现在页面之前把一段javascript写到页面

内容如下:

<script language="JavaScript">

<!--

function _doAspxBoyConfirm()

{

return confirm("你确认删除/保存吗??")

}

//-->

</script>

查一下msdn中对于Control.OnPreRender 方法的描述

可以得到“此方法通知服务器控件在保存视图状态和呈现内容之前,执行任何必要的预呈现步骤”.

所以我们只要在OnPreRender方法内 用Page.RegisterClientScriptBlock把这段javascript发送到客户端,并且给Button. Attributes属性内添加一个“onclick”的客户端属性对应值为: "return _doAspxBoyConfirm()”.

详细情况可以查阅

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemwebuiwebcontrolswebcontrolclassattributestopic.htm

这样一个具有ConFirm功能的Button就基本上建立起来了。

新建一个测试该控件的工程

在工具箱上点右键选择“添加/移除项”,点击浏览选择编译好的dll文件,点击确定,你会发现ConFirmButton已经添加到工具箱内了

将其托到一个Aspx页面内 在属性设置内给ConfirmMessage值为你要的弹出框内容比如“确定删除吗?”,按F5运行。

当点该按钮时会弹出一个confirm对话框询问“确定删除吗?”,如果点击确定则执行button的Button_Click事件,如果点击取消则不执行。

你可以查看他生成的html代码,以加深对该控件工作原理的理解

完整的代码如下:

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

using System.Text;



namespace AspxBoy.Com.ConfirmButton

{

/// <summary>

/// Button点击时会弹出一个对话框要求确认

/// </summary>

public class ConfirmButton : System.Web.UI.WebControls.Button

{

private string _confirmMessage;

/// <summary>

/// 当客户端点击此Button时弹出的提示消息筐的内容

/// </summary>

public string ConfirmMessage

{

get

{

return _confirmMessage;

}



set

{

_confirmMessage = value;

}

}



protected override void OnPreRender(System.EventArgs e)

{

StringBuilder sb = new StringBuilder();

sb.Append("<script language=/"JavaScript/">");

sb.Append(System.Environment.NewLine);

sb.Append("<!--");

sb.Append(System.Environment.NewLine);

sb.Append("/*--------------------------------------------");

sb.Append(System.Environment.NewLine);

sb.Append("ControlName:/t/tAspxBoy.Com.ConfirmButton");

sb.Append(System.Environment.NewLine);

sb.Append("AuthorName:/t/t/tHuobazi,WuMeibo");

sb.Append(System.Environment.NewLine);

sb.Append("CopyRight:/t/t/twww.AspxBoy.Com");

sb.Append(System.Environment.NewLine);

sb.Append("---------------------------------------------*/");

sb.Append(System.Environment.NewLine);

sb.Append("function _doAspxBoyConfirm()");

sb.Append(System.Environment.NewLine);

sb.Append("{");

sb.Append(System.Environment.NewLine);

sb.Append("return confirm(/"");

sb.Append(ConfirmMessage);

sb.Append("/")");

sb.Append(System.Environment.NewLine);

sb.Append("}");

sb.Append(System.Environment.NewLine);

sb.Append("//-->");

sb.Append("</script>");

Page.RegisterClientScriptBlock("_doAspxBoyConfirm",sb.ToString());

this.Attributes.Add("onclick","return _doAspxBoyConfirm()");

base.OnPreRender(e);

}

public override void RenderBeginTag(HtmlTextWriter writer)

{

writer.WriteLine();

writer.Write("<!-------------------");

writer.Write("AspxBoy.Com.ConfirmButton Start");

writer.Write("/tAuthorName: /tHuobazi");

writer.WriteLine(" --------------------->");

writer.Write("<!-------------------- ");

writer.Write("Copyright:2004 Huobazi(www.AspxBoy.com)");

writer.Write(" ---------------------");

writer.WriteLine(">");

base.RenderBeginTag(writer);

}

public override void RenderEndTag(HtmlTextWriter writer)

{

base.RenderEndTag(writer);

writer.WriteLine();

writer.Write("<!------------------------------- ");

writer.Write("AspxBoy.Com.ConfirmButton End");

writer.Write(" --------------------------------");

writer.WriteLine(">");

writer.WriteLine();

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QML是一种用户界面语言,可以用于开发桌面和移动应用程序。在QML中,可以通过弹出自定义模态对话框来实现与用户的交互。下面是一些实现此功能的步骤: 首先,需要创建一个新的QML文件来定义自定义模态对话框的布局和样式。在该文件中,可以使用标准QML组件来创建一个对话框,如Rectangle,Text和Button等。 其次,需要定义弹出自定义模态对话框的触发器,通常是一个按钮或菜单项。触发器应该有一个onClick事件处理程序,用来显示或隐藏自定义模态对话框。 然后,在onClick事件处理程序中,需要使用Qt Quick Dialogs组件中的Dialog组件来创建自定义模态对话框的实例。该组件提供了许多属性和方法,可以用于设置对话框的标题,内容和按钮等。 最后,在自定义模态对话框的QML文件中,可以定义与用户交互的信号和槽,例如用户单击按钮时触发的事件。通过使用这些信号和槽,可以实现与用户的高级交互。 通过以上步骤,可以在QML中实现弹出自定义模态对话框功能。在开发过程中,还需要注意遵循QML编程最佳实践,例如尽可能使用绑定和模型-视图分离等技术,以提高代码质量和可维护性。 ### 回答2: QML可以通过弹出自定义模态对话框来交互式地与用户进行交互,这主要是通过QML中提供的Dialog组件完成的。要弹出自定义模态对话框,需要创建一个新的自定义组件,该组件将作为Dialog的contentItem。 首先,创建一个QML文件作为自定义组件的模板。该模板可以包含所需的所有控件和布局,以及与这些控件相关的可视化效果。例如,一个包含一个文本框和两个按钮自定义组件可能如下所示: ``` import QtQuick 2.0 Item { id: customDialog width: 200 height: 100 Rectangle { width: parent.width height: parent.height color: "lightgray" border.color: "black" border.width: 1 radius: 6 Text { text: "Enter your name:" anchors.centerIn: parent } TextInput { id: nameInput width: parent.width - 20 height: 20 anchors.top: parent.top anchors.topMargin: 20 anchors.horizontalCenter: parent.horizontalCenter } Row { width: parent.width spacing: 10 anchors.bottom: parent.bottom anchors.bottomMargin: 10 anchors.horizontalCenter: parent.horizontalCenter Button { text: "OK" onClicked: parent.accepted() } Button { text: "Cancel" onClicked: parent.rejected() } } } } ``` 该自定义组件包括一个文本输入框,一个“OK”按钮一个“Cancel”按钮。在应用程序逻辑中,将创建一个与Dialog组件关联的弹出窗口,并将自定义组件添加为该窗口的contentItem。下面是一种可能的方法: ``` import QtQuick 2.0 import QtQuick.Controls 2.3 ApplicationWindow { id: mainWindow width: 300 height: 200 visible: true Button { text: "Open dialog" onClicked: openCustomDialog() } Dialog { id: customDialog title: "Custom dialog" x: (mainWindow.width - width) / 2 y: (mainWindow.height - height) / 2 modal: true contentItem: Item { CustomDialog { id: content anchors.fill: parent } } accepted: { console.log("OK clicked") console.log("Name entered: " + content.nameInput.text) } rejected: { console.log("Cancel clicked") } } function openCustomDialog() { customDialog.open() } } ``` 在这个例子中,当用户单击“Open dialog”按钮时,将调用openCustomDialog()函数,该函数将弹出一个自定义的模态对话框。该函数将调用Dialog的open()函数,它将显示模态对话框,直到用户单击“OK”或“Cancel”按钮为止。一旦用户单击了其中一个按钮,Dialog的accepted或rejected信号将触发。在这些信号的处理程序中,可以执行自定义操作,如读取文本输入框中输入的数据。 ### 回答3: QML弹出自定义模态对话框通常需要以下步骤: 1. 创建一个自定义的QML组件,例如MyDialog.qml,并将其放置在对话框中。 2. 在MyDialog.qml中定义一个模态属性,以确保对话框在打开时是模态的。例如: Rectangle { // ... 其他属性 property bool modal: true // ... 其他组件 } 3. 在MyDialog.qml中添加关闭对话框的行为。例如: Button { text: "Close" onClicked: myDialog.close(); } 4. 在主QML文件中,初始化自定义对话框一个实例,例如: import QtQuick.Controls 2.0 ApplicationWindow { // ... 其他属性 MyDialog { id: myDialog // ... 其他属性 } // ... 其他组件 } 5. 要使对话框出现,你可以向触发它的组件添加一个onClickd行为,例如一个按钮Button { text: "Open Dialog" onClicked: myDialog.open(); } 上述操作将创建一个自定义的QML组件,MyDialog.qml,它是模态的,并允许通过对话框中添加关闭按钮来关闭。还要在主QML文件中,初始化这个自定义对话框一个实例,并通过触发组件的onClickd行为,使其出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值