ユーザが選択した文字列のリストを表示するためのフォーム(StringSelector)を起動するカスタムUITypeEditor
を作成しました。問題は、このフォームがどのStringManagerを使用するのかを知る必要があることです(stringmanageは、単にListに許されるすべての文字列を含むクラスです)。C#UITypeEditor with Parameter
このフォームを作成したとき、StringManagerをコンストラクタのパラメータとして渡していましたが、UITypeEditorでこれをどのように行うことができません。
以下は、フォームを表示するためのパラメータを持たないコンストラクタを使用する私の現在のコードですが、コンストラクタのパラメータバージョンを呼び出さなかったため、明らかに文字列はありません。
EditValue関数内で使用できるUITypeEditorにパラメータを渡すにはどうすればよいですか?どうもありがとう。追加の詳細で更新
class StringSelectorEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
StringItem item = value as StringItem;
if (svc != null)
{
// ###### How do I pass a reference to this EditValue function so that I can....
using (StringSelector form = new StringSelector(/* ... INSERT IT HERE */))
{
form.Value = item;
if (svc.ShowDialog(form) == DialogResult.OK)
{
item = form.Value; // update object
}
}
}
return value; // can also replace the wrapper object here
}
}
:要求されたよう 、私は自身が人口StringManagerが含まれていControlInstanceというクラスを持っています。このControlInstanceクラスは、上記のStringSelectorEditor UITypeEditorリファレンスを含むPropertyGridコントロールとそのアクセサ関数に渡されます。ここでは、コードの抜粋です:
public class ControlInstance_Label : ControlInstance
{
StringManager stringManager;
string thisName = "";
StringItem linkedStringItem;
public ControlInstance_Label(String TextFilePath)
{
// Code here which populates the StringManager with text from the above file
}
[Category("Design"), Description("Control Name")]
public String Name
{
get { return thisName; }
set { thisName = value; }
}
// THIS IS WERE I SOMEHOW NEED TO PASS IN THE StringManager Ref to the EditValue function of the custom UITypeEditor
[Category("Design"), Description("Static String Linked to this Control")]
[Editor(typeof(StringSelectorEditor), typeof(UITypeEditor))]
public StringItem LinkedString
{
get { return linkedStringItem; }
set { linkedStringItem = value; }
}
}
StringManagerインスタンスはどこに格納/宣言されていますか? –
このStringSelectorEditorクラスの外側ですが、このUITypeEditorを使用するクラスからアクセスできます。 – TheGrovesy
もっと正確にしてください。たとえば、いくつかのサンプルコードを表示します。 –