C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: プロパティウインドウ下の動詞パネルの更新方法


(過去ログ 83 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■49269 / inTopicNo.1)  プロパティウインドウ下の動詞パネルの更新方法
  
□投稿者/ issa (1回)-(2010/04/28(Wed) 15:25:51)

分類:[C#] 

VS2005を利用し,
C#で開発を行っています。

DesignerActionMethodItem item = new DesignerActionMethodItem(this, "HOGEName"HOGEText", "Hoge", true);
といった形でスマートタグとプロパティウインドウ下の動詞パネルにコマンドを表示しています。

このコマンドが実行されると、スマートタグと動詞パネルの更新を行いたいと思っているのですが、
GetSortedActionItemsオーバーライドメソッドで、DesignerActionItemCollectionの更新を行い、

DesignerActionUIService service = (DesignerActionUIService)this.provider.GetService(typeof(DesignerActionUIService));
service.Refresh(this.component);

という記述でスマートタグの更新はかけられたのですが、
動詞パネルの更新がかかりません。

IMenuCommandService mcs = (IMenuCommandService)this.provider.GetService(typeof(IMenuCommandService));
mcs.Verbs.Clear();

とすると、動詞パネル内がクリアされたので、
このVerbsプロパティに設定すればいいと思うのですが、

DesignerActionMethodItem⇒DesignerVerbに変換する方法がわかりません。
DesignerActionMethodItemのリストをフィールドに保持しているので、こちらをできれば使いたいのです。。

なにか動詞パネルを更新するいい方法があれば、ご教授願います。




引用返信 編集キー/
■49274 / inTopicNo.2)  Re[1]: プロパティウインドウ下の動詞パネルの更新方法
□投稿者/ issa (3回)-(2010/04/28(Wed) 18:57:14)
自己解決しました。

結果、Verbsは初回生成時にしか更新されないようだったので、
更新したいタイミングで、フィールドに保持していたDesignerActionMethodItemCollectionを利用し、


// フィールドに保持しているDesignerActionMethodItemコレクションを利用
foreach (DesignerActionItem item in this.items)
{
	// キャストできるかを確認
	DesignerActionMethodItem obj = item as DesignerActionMethodItem;
	// 動詞パネルに表示する設定になっているかを確認
	if (obj != null && obj.IncludeAsDesignerVerb)
	{
		// メソッド情報を登録
		System.Reflection.MethodInfo minfo = this.GetType().GetMethod(obj.MemberName,
			System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
		mcs.AddVerb(new DesignerVerb(obj.DisplayName, delegate(object sender, EventArgs e)
		{
			minfo.Invoke(this, null);
		}));
	}
}


といった方法で積むことにしました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -