2013-04-22 52 views
1

是否可以获取表单存在的项目路径?在项目中获取表单的保存路径

我有一堆形式,我安排在树视图来帮助用户导航。目前我有一个属性,我应用于表单的类,告诉它显示下面的表单的路径。

为了让他们在项目中有点组织,我还创建了一个类似的文件夹结构并将这些表格保存在这些文件中。

只是想通过简单地使用窗体保存在项目中的路径来设置树视图中的层次结构,但使用谷歌搜索和浏览窗体的所有属性和窗体的类型不重复, t似乎有帮助。

+0

文件夹结构是否与命名空间结构相同?如果是这样,所有你需要的是这个类型的FullName。 – 2013-04-22 04:22:32

+0

想到这样做,但他们都在同一个名字空间。 – Bluenoserforever 2013-04-22 05:11:41

回答

1

编辑 我发现了一个这样做的方法,但被警告,它很丑。

你可以看看这个宝石(在.NET 4.5提供)CallerFilePath

Public Shared Function GetFilePath() As String 
    Return GetFilePath2() 
End Function 

Private Shared Function GetFilePath2(
    <CallerFilePath> Optional sourcefilePath As String = Nothing) 

    Return sourcefilePath 

End Function 

私有函数返回引发了调用的文件的物理路径。这就是公共职能包装私人功能的原因。

将这些添加到每个窗体,您将能够获得窗体/类的物理文件路径。

我将这些函数设为Shared,因此您不必为获取其路径而实例化窗体。不幸的是,你不能创建一个包含这个方法的基类并继承你的所有表单,因为这将返回基类的路径。所以你需要在你所有的窗体中创建这些功能......这很丑陋,但是它可以实现你想要的功能。

第二个想法:你可以把私有函数放在辅助类中作为扩展方法,这样你只需要在每个表单中放置公共函数。

老答案

在Visual Studio中的解决方案的文件夹结构不提供给应用程序。

所以解决这个问题的唯一方法是通过自己进入结构,编写一些逻辑(宏?)来提取文件夹结构或保持名称空间同步。

IF命名空间反映了相同的结构,你可以简单地使用该类型的全名:

Dim t As Type = GetType(Form1) 
Console.WriteLine("The full name of the form is {0}.", t.FullName) 

而且你可以使用String.Split打破全名到命名空间的部分。

编辑 (我搬到这来记,因为它是不相关的VB,但可能是有用的C#用户寻找类似的功能)

在C#中(而不是在VB):当您在Visual Studio解决方案中创建文件夹结构,那么您在这些文件夹中创建的类型将成为这些类型的命名空间。请注意,当您操作(重命名文件夹,移动文件)解决方案项目时,名称空间不会更新。

+1

我很确定你的第二段对于VB.NET是不正确的。我认为这只是C#文件夹结构由命名空间镜像的地方。 (但我可能是错的,所以我没有编辑你的答案或任何东西。) – 2013-04-22 07:03:39

+0

无论如何,真正的答案是在第一行。当你发布应用程序时,你所有的个人项目文件夹和表单都不会在那里,所以无论你编写的代码依赖于哪个代码,都会中断。 – 2013-04-22 07:04:40

+0

@CodyGray - 我会马上测试并根据需要编辑我的答案。谢谢,我想我太拖欠C#:) – 2013-04-22 07:06:15