いくつかの引数といくつかのプロパティを持つカスタムアクティビティがあります。再ホストされたデザイナにアクティビティをドロップすると、引数とプロパティの両方がプロパティウィンドウから表示され、ユーザーは値や変数名などを入力できます。
(プロパティウィンドウの)プロパティの1つについて、ユーザーが入力できないようにしますが、代わりにテキストボックスをコンボボックスに置き換えて、値のリストから選択できるようにします。これ、答えが見つからないようです。
解決済みとしてマークされた既存のエントリのコードを使用しましたが、私の要求は少し異なる要件です。
私のカスタムアクティビティでは、問題のプロパティの上に次のように配置しました。
[EditorAttribute(typeof(ComboBoxTest), typeof(System.Drawing.Design.UITypeEditor))]
そして、UITypeEditorから継承して、ComboBoxTestクラスを作成しました。
public class ComboBoxTest : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
var editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
ListBox list = new ListBox();
//ComboBox list = new ComboBox();
// Your code here to populate the list box with your items
list.Items.Add("A");
list.Items.Add("B");
list.Items.Add("C");
EventHandler onclick = (sender, e) =>
{
editorService.CloseDropDown();
};
list.Click += onclick;
editorService.DropDownControl(list);
list.Click -= onclick;
return (list.SelectedItem != null) ? list.SelectedItem : null;
}
}
ただし、アクティビティをデザイナにドロップすると、プロパティウィンドウにテキストボックスが表示され、コンボボックスは表示されません。ブレークポイントにヒットしないため、デバッグすることすらできないようです。
A)私が正しい方法でやっているのか、B)どこかでエラーが発生したのか、C)使用すべきアプローチがはるかに優れているのか、誰かが知っているだろうか。
私はそれがすべて理にかなっていることを願っています。読んでくれてありがとう!
よろしく、マイケル