C#继承窗体的引用文件路径有关问题
C#继承窗体的引用文件路径问题
假设:Debug目录下有个资源文件Res,里面有很多图片
(1) Form1作为被继承窗体,引用了Res里的图片,如:
private Image _fringe = Image.FromFile(@"Res\fringe_bkg.png");
......
(2) Form2继承自Form1
class Form2: Form1
但Form2.cs[设计]会提示如下错误

虽然编译可以正常通过,但会导致无法正常编辑Form2界面
(3)尝试把所有引用路径都换成绝对路径:
private Image _fringe = Image.FromFile(@"D:\test\bin\Debug\Res\fringe_bkg.png");
......
发现Form2居然可以正常显示了
(4)尝试使用相对路径
private Image _fringe = Image.FromFile(Application.StartupPath + @"\Res\fringe_bkg.png");
提示如下错误:

问题:
为什么单独只有Form1时使用相对路径就可以,但当有窗体继承自Form1时就必须要绝对路径呢?
请各位大虾指点一下如何构造才能确保在Form1中不使用绝对路径的情形下也能在开发时让Form2显示正常?
------解决思路----------------------
这个和vs有关,它估计没有处理好这种方式下的工作路径。看起来vs designer加载的时候,工作路径不是你的程序所在,而是IDE的devenv.exe进程所在的地方,就不对了。Application.StartupPath显然也是devenv.exe所在。
你需要通过Assembly来定位。不过一般方式是判断处于DesignTime的时候,不加载这些实际的资源。
------解决思路----------------------
不行试试安装个高版本的vs,看是否高版本解决了这个问题吧
------解决思路----------------------
参考:
------解决思路----------------------
既然基窗体里面已经有了这个资源,继承窗体里面再选,就是重复定义了。如果用绝对路径,vs大概是认为这个和相对路径有不同的定义,所以不报错吧。
假设:Debug目录下有个资源文件Res,里面有很多图片
(1) Form1作为被继承窗体,引用了Res里的图片,如:
private Image _fringe = Image.FromFile(@"Res\fringe_bkg.png");
......
(2) Form2继承自Form1
class Form2: Form1
但Form2.cs[设计]会提示如下错误
虽然编译可以正常通过,但会导致无法正常编辑Form2界面
(3)尝试把所有引用路径都换成绝对路径:
private Image _fringe = Image.FromFile(@"D:\test\bin\Debug\Res\fringe_bkg.png");
......
发现Form2居然可以正常显示了
(4)尝试使用相对路径
private Image _fringe = Image.FromFile(Application.StartupPath + @"\Res\fringe_bkg.png");
提示如下错误:
问题:
为什么单独只有Form1时使用相对路径就可以,但当有窗体继承自Form1时就必须要绝对路径呢?
请各位大虾指点一下如何构造才能确保在Form1中不使用绝对路径的情形下也能在开发时让Form2显示正常?
------解决思路----------------------
这个和vs有关,它估计没有处理好这种方式下的工作路径。看起来vs designer加载的时候,工作路径不是你的程序所在,而是IDE的devenv.exe进程所在的地方,就不对了。Application.StartupPath显然也是devenv.exe所在。
你需要通过Assembly来定位。不过一般方式是判断处于DesignTime的时候,不加载这些实际的资源。
------解决思路----------------------
不行试试安装个高版本的vs,看是否高版本解决了这个问题吧
------解决思路----------------------
参考:
if (!this.DesignMode)
{
//设置所有继承该窗体的窗体的图标
string iconUrl = Application.StartupPath + "\\图片.ico";
if (System.IO.File.Exists(iconUrl))
{
this.Icon = new Icon(Application.StartupPath + "\\图片.ico");
}
}
------解决思路----------------------
既然基窗体里面已经有了这个资源,继承窗体里面再选,就是重复定义了。如果用绝对路径,vs大概是认为这个和相对路径有不同的定义,所以不报错吧。