在ArcGIS Pro,有一类窗体控件是系统已经封装好的,比如消息框、提醒框等。下面通过代码来学习一下。
新建一个项目,命名为【ProWindow】,添加5个按钮,命名为【Show_MessageBox、Show_NoticeBox、Show_OpenDialog、Show_SaveDialog和Show_ProgressDialog】,分别控制5种封装窗体控件的演示,如下图所示:
消息框是最简单的一种窗体,广泛用用于提示信息,在开发过程中也经常会用到。
消息框一般情况下只有【消息文本和标题文本】2个参数。
修改【Show_MessageBox.cs】的OnClick事件如下:
protected override void OnClick()
{
// 第1个参数:消息文本。第2个参数:标题文本。
System.Windows.MessageBox.Show("这是一个消息文本!!!!!!!!", "提示框");
}
演示结果:
提醒框一般在提醒错误的情形中使用。
提醒框的参数也比较简单,一般比消息框会多一个警示图片。
修改【Show_NoticeBox.cs】的OnClick事件如下:
protected override void OnClick()
{
Notification notification = new Notification();
notification.Title = "重要提醒"; //提醒框标题
notification.Message = "这是一个提醒文本###"; //提醒内容
notification.ImageUrl = @"file:///D:\【软件资料】\GIS相关\ArcGIS Pro二次开发工具\ProWindow\Images\GB.png"; //图片路径
FrameworkApplication.AddNotification(notification);
}
演示结果:
打开文件对话框一般用于从本地电脑中选择文件并打开。
重要参数有2个,【MultiSelect】确定是否可以多选文件,【Filter】类型筛选,可以选择【Files_All、GeodatabaseItems_All、Projects、TextFiles】等类型的数据。
修改【Show_OpenDialog.cs】的OnClick事件如下:
protected override void OnClick()
{
OpenItemDialog openDlg = new OpenItemDialog()
{
Title = "选择一个要素", //打开对话框标题
MultiSelect = false, //是否可以多选
Filter = ItemFilters.GeodatabaseItems_All, //类型筛选
};
//打开对话框
bool? ok = openDlg.ShowDialog();
//如果没有选择内容,则返回
if (!ok.HasValue || openDlg.Items.Count() == 0)
return;
//如果有选择内容,返回选择的内容
var item = openDlg.Items.First();
//显示返回要素的路径
MessageBox.Show("要素路径:" + item.Path, "你所选择的要素");
}
如果有选择的内容,则用消息框提示选择内容的路径。演示结果:
保存文件对话框和打开文件对话框类似。
重要参数比打开文件对话框少了【MultiSelect】,因为你不可能同时保存为多个文件。
修改【Show_SaveDialog.cs】的OnClick事件如下:
protected override void OnClick()
{
SaveItemDialog saveDlg = new SaveItemDialog()
{
Title = "保存为", //打开对话框标题
Filter = ItemFilters.GeodatabaseItems_All, //类型筛选
};
//打开对话框
bool? ok = saveDlg.ShowDialog();
//如果没有选择内容,则返回
if (!ok.HasValue)
return;
//如果有选择内容,显示返回要素的路径
MessageBox.Show("要素路径:" + saveDlg.FilePath, "你所保存的要素");
}
如果有保存的内容,则用消息框提示选择保存内容的路径。演示结果:
进度条一般配合别的进程一起使用,表示该进程的运行进度。
这里引用了一个系统自带的工具【management.CopyFeatures】,配合进度条。当工具运行时,进度条显示,工具运行结束,进度条关闭。
修改【Show_ProgressDialog.cs】的OnClick事件如下:
protected override async void OnClick()
{
var progDlg = new ProgressDialog("进度条", "取消", 100, true);
progDlg.Show();
var progSrc = new CancelableProgressorSource(progDlg);
// 为要调用的工具准备好参数
string input_data = @"C:\Users\Administrator\Documents\ArcGIS\Projects\Test\Test.gdb\年度变更";
string out_workspace = Project.Current.DefaultGeodatabasePath;
string out_data = System.IO.Path.Combine(out_workspace, "年度变更2");
// 工具参数
var parameters = Geoprocessing.MakeValueArray(input_data, out_data);
// 调用工具【management.CopyFeatures】
await Geoprocessing.ExecuteToolAsync("management.CopyFeatures", parameters,
null, new CancelableProgressorSource(progDlg).Progressor, GPExecuteToolFlags.Default);
// 工具运行完毕后关闭进度条
progDlg.Hide();
}
演示结果:
当要素复制结束时,进度条自动关闭。
以上就是5个窗体控件的小实例演示。
最后,放上工程文件的链接:
ProWindowhttps://pan.baidu.com/s/1TmpO35SICMg__9SHvXe6wA?pwd=x7rj