屬性顯示方格
[ 屬性] 視窗會顯示方格內的欄位。 左數據行包含屬性名稱;右側數據列包含屬性值。
使用方格
雙欄清單會顯示可在設計時間及其目前設定變更的組態無關屬性。 請注意,可能不會顯示所有屬性。 屬性可以設定為隱藏,例如,藉由實作 HideProperty 方法。 具體而言,若要隱藏具有子屬性的屬性:
將
pfDisplay
中的 DisplayChildProperties 參數設定為FALSE
。將
pfHide
中的 HideProperty 參數設定為TRUE
。
若要將資訊推送至 [ 屬性 ] 視窗,IDE 會使用 ISelectionContainer。 ISelectionContainer VSPackages 會針對每個視窗呼叫,其中包含要顯示在 [屬性 ] 視窗中之相關屬性的可選取物件。 方案總管 使用 __VSHPROPID 實作ISelectionContainer呼叫GetProperty
。 VSHPROPID_BrowseObject項目階層中取得階層中可瀏覽的物件。
如果您的 VSPackage 不支援 __VSHPROPID。VSHPROPID_BrowseObject,IDE 會嘗試使用 GetProperty __VSHPROPID 的值 。 VSHPROPID_SelContainer階層專案或專案提供。
您的專案 VSPackage 不需要建立ISelectionContainer,因為實作它的 IDE 提供視窗套件(例如,方案總管) 會代表它建構ISelectionContainer。
ISelectionContainer 由 IDE 所呼叫的三種方法所組成:
CountObjects 包含要顯示在 [屬性 ] 視窗中的物件數目。
GetObjects 會傳
IDispatch
回選取要顯示在 [屬性 ] 視窗中的物件。SelectObjects 讓用戶能夠選取所傳回 GetObjects 的任何物件。 這可讓 VSPackage 以可視化方式更新 UI 中向使用者顯示的選取範圍。
[ 屬性 ] 視窗會從物件擷 IDispatch
取資訊,以擷取要瀏覽的屬性。 Properties 瀏覽器會使用 IDispatch
查詢 來詢問物件,其支援 ITypeInfo
的屬性是從 取得 IDispatch::GetTypeInfo
。 然後瀏覽器會使用這些值填入 [屬性 ] 視窗,並變更方格中顯示的個別屬性值。 屬性資訊會保留在物件本身內。
由於傳回的物件支援 IDispatch
,因此呼叫端可以藉由呼叫 或ITypeInfo::Invoke
預先定義的分派標識碼 (DISPID) 來IDispatch::Invoke
取得物件名稱等資訊,代表所需資訊。 宣告的 DISPID 是負數,以確保它們不會與使用者定義的標識碼衝突。
[ 屬性 ] 視窗會根據所選物件之特定屬性的屬性,顯示不同類型的欄位。 這些欄位包括編輯框、下拉式清單,以及自訂編輯器對話框的連結。
列舉清單中所包含的值會由 GetObjects 查詢擷取。
IDispatch
您可以按兩下域名稱,或按下值,然後從下拉式清單中選取新值,在屬性方格中變更從列舉清單中取得的值。 對於具有列舉清單中預先定義設定的屬性,按兩下 [屬性] 清單中的屬性名稱會迴圈查看可用的選項。 若為只有兩個選項的預先定義屬性,例如 true/false,請按兩下屬性名稱以在選項之間切換。如果 HasDefaultValue 為
false
,表示值已變更,則會以粗體文字顯示值。 CanResetPropertyValue 用來判斷值是否可以重設為原始值。 若是如此,您可以以滑鼠右鍵按單擊值,然後從顯示的功能表中選擇 [重 設],以變更回預設值。 否則,您必須手動將值變更回預設值。 IVsPerPropertyBrowsing 也可讓您當地語系化和隱藏設計時間所顯示的屬性名稱,但不會影響運行時間期間顯示的屬性名稱。按兩下省略號 (...) 按鈕會顯示使用者可以選取的屬性值清單(例如色彩選擇器或字型清單)。 IProvidePropertyBuilder 提供這些值。