我正在开发winform应用程序。我的应用程序中有一个用户控件作为同一项目的一部分。我在该用户控件的构造函数中编写了以下代码
public ctrlCurrentLocation()
{
InitializeComponent();
string NewLine = System.Environment.NewLine;
string strHeader = string.Concat("<?xml version=\"1.0\"?>", NewLine, "<TrackMap>", NewLine);
string strLast = strHeader + string.Concat("</TrackMap>", NewLine);
strXMLPath = AppDomain.CurrentDomain.BaseDirectory + "JavaScript\\TrackMap.xml";
FileStream fs1 = File.Open(strXMLPath, FileMode.Create);
StreamWriter writer1 = new StreamWriter(fs1, Encoding.UTF8);
writer1.Write(strLast);
writer1.Close();
fs1.Dispose();
.......
.
.
}
现在,在构建解决方案后,此用户控件将显示在工具箱中。 当我试图在我的mainForm中拖动此用户控件时,它会抛出设计时异常说
可能是什么原因,它会在行
处引发错误FileStream fs1 = File.Open(strXMLPath, FileMode.Create);
答案 0 :(得分:0)
AppDomain.CurrentDomain.BaseDirectory
正在返回C:\Program Files...\IDE
。这不是您的TrackMap.xml
文件的位置。
您可以向UserControl添加属性,例如ctrlCurrentLocation.MapFilePath
,可以在设计器中设置。然后使用文件的数据刷新userControl。
private string _mapFilePath = null;
public ctrlCurrentLocation()
{
InitializeComponent();
}
private void ReloadMap()
{
if(_mapFilePath != null && File.Exists(_mapFilePath))
{
string NewLine = System.Environment.NewLine;
string strHeader = string.Concat("<?xml version=\"1.0\"?>", NewLine, "<TrackMap>", NewLine);
string strLast = strHeader + string.Concat("</TrackMap>", NewLine);
strXMLPath = AppDomain.CurrentDomain.BaseDirectory + "JavaScript\\TrackMap.xml";
FileStream fs1 = File.Open(strXMLPath, FileMode.Create);
StreamWriter writer1 = new StreamWriter(fs1, Encoding.UTF8);
writer1.Write(strLast);
writer1.Close();
fs1.Dispose();
.......
.
.
}
}
public string MapFilePath
{
get { return _mapFilePath; }
set
{
_mapFilePath = value;
ReloadMap();
}
}
使用映射路径的代码已从构造函数移动到其自己的方法。只要MapFilePath属性发生更改,就会调用此方法。
此属性将出现在设计器的“属性”面板中,因为它是UserControl类的公共属性。在那里,您可以粘贴文件路径,并执行ReloadMap
的代码。