更改 devexpress layoutcontrolitem 编辑器类型?

Changing the devexpress layoutcontrolitem editor type?

如何更改 devexpress layoutcontrolitem 编辑器类型?

例如 - 将 searchlookupedit 更改为 textedit,然后再改回来。

我可以将 searchlookupedit 更改为 textedit,但反之则不行。

这是我的代码:

public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
    public Form1()
    {
        InitializeComponent();
    }

    private void checkEdit1_CheckedChanged(object sender, EventArgs e)
    {
        if (checkEdit1.Checked)
        {
            ConvertEditorType("TextEdit", searchLookUpEdit1, layoutControlItem1);
            //this.Text = searchLookUpEdit1.GetType().ToString();
        }
        else
        {
            ConvertEditorType("SearchLookUpEdit", searchLookUpEdit1, layoutControlItem1);
            //this.Text = searchLookUpEdit1.GetType().ToString();
        }
    }
    private void ConvertEditorType(string editorTypeName, BaseEdit sourceEditor, LayoutControlItem layout)
    {
        layout.Owner.BeginUpdate();
        EditorClassInfo info = EditorRegistrationInfo.Default.Editors[editorTypeName];
        if (info == null) return;
        BaseEdit edit = info.CreateEditor();
        //this.Text = edit.GetType().ToString();
        edit.Location = sourceEditor.Location;
        edit.Size = sourceEditor.Size;
        edit.Parent = sourceEditor.Parent;
        edit.Properties.Assign(sourceEditor.Properties);
        layout.Control = edit;
        layout.Owner.EndUpdate();
        sourceEditor.Dispose();
        sourceEditor = null;
    }

请帮忙,谢谢。

这是我几年前使用的 DevExpress 的解决方案。我觉得值得一看

https://www.devexpress.com/Support/Center/Question/Details/Q353927/converting-one-control-to-another-at-run-time

基本上他们有一个自定义的 EditorConverter class 可以满足您的需要。它重新分配了很多属性和数据绑定。也许您不需要 class 中的所有内容,但当我将它与您的代码示例一起使用时,它似乎按预期工作。