Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件无法添加到winform?_C#_Winforms_User Controls - Fatal编程技术网

C# 用户控件无法添加到winform?

C# 用户控件无法添加到winform?,c#,winforms,user-controls,C#,Winforms,User Controls,我正在处理winform应用程序。作为同一项目的一部分,我的应用程序中有一个用户控件。我在该用户控件的构造函数中编写了以下代码 public ctrlCurrentLocation() { InitializeComponent(); string NewLine = System.Environment.NewLine; string strHeader = string.Concat("<?xml ver

我正在处理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();
        .......
        .
        .
    }

AppDomain.CurrentDomain.BaseDirectory
在设计模式下返回
C:\Program Files…\IDE
。这不是您的
TrackMap.xml
文件所在的位置

您可以向UserControl添加属性,例如
ctrlCurrentLocation.MapFilePath
,该属性可以在设计器中设置。然后用文件的数据刷新userControl

例子:
private string\u mapFilePath=null;
公共ctrlCurrentLocation()
{            
初始化组件();
}
私有void重载映射()
{
如果(_mapFilePath!=null&&File.Exists(_mapFilePath))
{
字符串换行符=System.Environment.NewLine;
string strHeader=string.Concat(“,换行符,”,换行符);
string strLast=strHeader+string.Concat(“,换行符);
strXMLPath=AppDomain.CurrentDomain.BaseDirectory+“JavaScript\\TrackMap.xml”;
FileStream fs1=File.Open(strXMLPath,FileMode.Create);
StreamWriter writer1=新的StreamWriter(fs1,Encoding.UTF8);
writer1.写入(strLast);
writer1.Close();
fs1.Dispose();
.......
.
.
}
}
公共字符串映射文件路径
{
获取{return\u mapFilePath;}
设置
{
_mapFilePath=value;
重载映射();
}
}
使用映射路径的代码已从构造函数移动到其自己的方法。然后,只要MapFilePath属性发生更改,就会调用此方法


此属性将出现在设计器的“属性”面板中,因为它是UserControl类的公共属性。您可以在那里粘贴文件路径,并将执行
ReloadMap
的代码。

如果将代码放置在UserControl的构造函数中,则Visual Studio也将在设计时执行该代码。这是你的本意吗?如果不是-检查IsDesignMode属性,仅当IsDesignMode==false时,才在InitializeComponent()之后执行代码
FileStream fs1 = File.Open(strXMLPath, FileMode.Create);
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();
    }
}