自定了一个让用户选择导出数据的对话框(在模态下),第一个
TreeView
存放数据库存在的字段,
第二个
TreeView
存放用户选择的数据字段,根据用户单击的按钮导出到
Excel
或文件中,如下界面:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/fcc_ecjtu/70d37534b4f1462584c563e005ef98a1.png)
问题:在用户单击导出文件或导出到
Excel
后,如果导出字段为空话,需要用一个对话框提示用户
?
解决办法:显然需要在
Click
事件前做判断,在
MSDN
找了下
,
没发现能解决问题用来解决这个问题事件,于是自定义一个
Button
控件,在里面添加了一个
PreClick
事件,并重写了
OnClick
事件
,
然后为
PreClick
事件中判断导出字段是否为空
,
在
OnClick
事件里面触发
PreClick
事件
,
运行效果如下图
:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/fcc_ecjtu/eda546ee06874523aa817f4f31358e77.png)
当用户单击确认会继续执行导出数据的操作
而当用户单击取消时模态对话框并不会关闭
.
代码如下
:
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Drawing;
using
System.Data;
using
System.Windows.Forms;
namespace
DataManager
{
///
定义返回
Bool
的
Delegate
public delegate bool PreClickDelegate();
///<summary>
/// MyButton
的摘要说明。
///</summary>
public class MyButton : System.Windows.Forms.Button
{
///<summary>
///
必需的设计器变量。
///</summary>
private System.ComponentModel.Container components = null;
public MyButton()
{
//
该调用是
Windows.Forms
窗体设计器所必需的。
InitializeComponent();
// TODO:
在
InitializeComponent
调用后添加任何初始化
}
///<summary>
///
清理所有正在使用的资源。
///</summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
///<summary>
///
定义事件
///</summary>
public event PreClickDelegate PreClick;
///<summary>
///
重写
OnClick
函数
///</summary>
///<param name="e"></param>
protected override void OnClick(EventArgs e)
{
if (PreClick != null)
{
if(PreClick())
{
base.OnClick (e);
}
else
{
if(DialogResult.OK == MessageBox.Show("
你没有选择字段
,
继续执行请按确认按扭
.",
"
提示
",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Information))
{
base.OnClick (e);
}
}
}
}
#region
组件设计器生成的代码
///<summary>
///
设计器支持所需的方法
-
不要使用代码编辑器
///
修改此方法的内容。
///</summary>
private void InitializeComponent()
{
//
// MyButton
//
this.Name = "MyButton";
this.Size = new System.Drawing.Size(88, 24);
}
#endregion
}
}
///<summary>
///
确认用户是否选择了数据字段
///</summary>
///<returns></returns>
private bool myButton1_PreClick()
{
if(tvwTarget.Nodes.Count == 0)
{
return false;
}
else
{
return true;
}
}
如果有好的想法请赐教!