Ich habe eine benutzerdefinierte UITypeEditor
erstellt, die ein Formular (StringSelector) startet, um eine Liste der Zeichenfolgen anzuzeigen, die der Benutzer auswählt. Das Problem ist, dass dieses Formular wissen muss, was StringManager zu verwenden hat (stringmanage ist einfach eine Klasse, die alle in einer Liste erlaubten Strings enthält).C# UITypeEditor mit Parameter
Als ich dieses Formular erstellte, übergab ich den StringManager als Parameter im Konstruktor, aber ich kann nicht herausfinden, wie ich dies mit dem UITypeEditor tun kann.
Unten ist mein aktueller Code, der einen Konstruktor verwendet, der keine Parameter hat, nur um das Formular zu zeigen, aber es gibt offensichtlich keine Zeichenfolgen, da ich die Parameterversion des Konstruktors nicht aufgerufen habe.
Wie kann ich einen Parameter an den UITypeEditor übergeben, den ich dann innerhalb der EditValue-Funktion verwenden kann? Danke vielmals.
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
}
}
mit zusätzlichem Detail AKTUALISIERT: Wie gewünscht, ich habe eine Klasse namens ControlInstance denen sich die besiedelten StringManager enthalten. Diese ControlInstance-Klasse wird an das PropertyGrid-Steuerelement und die zugehörigen Accessor-Funktionen übergeben, einschließlich der oben beschriebenen StringSelectorEditor UITypeEditor-Referenz. Hier ist ein Ausschnitt des Codes:
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; }
}
}
Wo ist die StringManager-Instanz gespeichert/deklariert? –
Außerhalb dieser StringSelectorEditor-Klasse, aber kann von der Klasse aus aufgerufen werden, die diesen UITypeEditor verwendet. – TheGrovesy
Bitte seien Sie genauer. Zeigen Sie zum Beispiel einen Beispielcode an. –