2013-04-22 54 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