Show() 是非模式窗体,而 ShowDialog() 是模式窗体. ShowDialog() 在未按确定等键时(即未消失时),无法在桌面进行其他操作,只有 dialog 消失后,系统才会继续执行其他指令。Show()则不同,显示的同时,系统已经开始执行其他指令了。例如,一个窗体 form含有一个文本框和一个确定按钮,需要实现:在点击确定按钮时把文本框中的内容传给后续的代码。
//窗体“确定”按钮触发事件
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "") {
_bookMarkname = textBox1.Text;
}
this.Close();
}
BookMarknameForm bookMnameF = new BookMarknameForm();
bookMnameF.ShowDialog(); //打开输入书签名窗体
string str = bookMnameF.bookMarkname;
这里不适合使用.Show()方法,不然str会是空值。用.ShowDialog() 是可以的。
所需的文件保存目录下,不只需要.shp文件,也需要:.dbf文件和 .shx文件。缺失这两个文件中任何一个会出现如下错误(其实函数的参数传入错误也会报这个错):
未处理 System.Runtime.InteropServices.COMException
HResult=-2147467259
Message=对 COM 组件的调用返回了错误 HRESULT E_FAIL。
Source=ESRI.ArcGIS.Geodatabase
ErrorCode=-2147467259
StackTrace:
在 ESRI.ArcGIS.Geodatabase.IFeatureWorkspace.OpenFeatureClass(String Name)
在 myBookmark.MainForm.loadShapefiledataToolStripMenuItem_Click(Object sender, EventArgs e) 位置 C:\Users\Administrator\documents\visual studio 2010\Projects\myBookmark\myBookmark\MainForm.cs:行号 188
在 System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
在 System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
在 System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
在 System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
在 System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
在 System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
在 System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
在 System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
在 System.Windows.Forms.ToolStrip.WndProc(Message& m)
在 System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.Run(Form mainForm)
在 myBookmark.Program.Main() 位置 c:\users\administrator\documents\visual studio 2010\Projects\myBookmark\myBookmark\Program.cs:行号 27
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:
检索 COM 类工厂中 CLSID 为 {A06ADB96-D95C-11D1-AA81-00C04FA33A15} 的组件失败,原因是出现以下错误: 80040111 ClassFactory 无法供应请求的类 (异常来自 HRESULT:0x80040111 (CLASS_E_CLASSNOTAVAILABLE))。
解决方法:在程序入口加上:
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
还要记得添加引用:ESRI.ArcGIS.Version
System.Runtime.InteropServices.COMException: 异常来自 HRESULT:0x80040228
IAoInitialize m_aoinitialize = new AoInitializeClass(); m_aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
错误 1 “GISMapControl.MainForm”不包含“miSpatialFilterToolStripMenuItem_Click”的定义,并且找不到可接受类型为“GISMapControl.MainForm”的第一个参数的扩展方法“miSpatialFilterToolStripMenuItem_Click”(是否缺少 using 指令或程序集引用?) e:\visual studio 2010\Projects\GISMapControl\GISMapControl\MainForm.Designer.cs 332 85 GISMapControl
这种错误一般是在按钮属性里注册了点击事件函数,而在程序代码里没有相关函数的实现。所以解决方法是:要么在程序代码里加入该点击事件函数,要么就在按钮属性里注销该点击事件函数。注销方法有:在MainForm.Designer.cs里将注册该点击时间函数的代码删除或注释掉。
当你的 mapcontrol application 在运行时读取一个在ArcMap中已经打开的文件时,就有可能报这个错。
! [rejected] master -> master (fetch first)
error: failed to push some refs to
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决:这是因为本地版本和主干上的有差异,先pull远端的版本,解决了冲突才能push。
出现这问题的原因是:我遍历要素类里的要素的某一属性值时,使用的是featureLayer.FeatureClass.GetFeature(i).get_Value(j)
应该使用
IFeatureCursor featureCursor = featureLayer.Search(null, false);
IFeature feature = featureCursor.NextFeature();
feature.get_Value(i);
原因是:WhereClause语句不规范。可参考这篇博文
//将featureSelection接口转化为IFeatureLayer类型
IFeatureLayer featureLayer = featureSelection as IFeatureLayer;
//获取选择集中要素的分布范围
IEnvelope envelope = featureLayer.AreaOfInterest;
//将选择集中的要素的分布范围赋给activeView的Extent属性
activeView.Extent = envelope;
//刷新视图
activeView.Refresh();
//打开要素类
barriesFClass = pFWorkspace.OpenFeatureClass("Barries");
//判断该要素类里是否含有要素,若有,则删除
if (barriesFClass.FeatureCount(null) > 0)
{
ITable pTable = barriesFClass as ITable;
pTable.DeleteSearchedRows(null);
}
解决方案:在引用中右键选中相关的库,查看属性,把“嵌入互操作类型”由True改成False。
参考这篇文章