“Запрещенные символы в пути”. Режим конструктора Visual Studio WinForm

Я соединяю легкий шаблон MVP для проекта WinForms. Все компилирует и хорошо работает. Однако, когда я пытаюсь открыть WinForm в режиме проектирования в Visual Studio, я получаю "Запрещенные символы в пути" ошибка. Мой WinForm использует дженерики и наследовался основному классу Формы. Существует ли проблема с использованием дженериков в WinForm?

Вот WinForm и основной класс Формы.

public partial class TapsForm : MvpForm<TapsPresenter, TapsFormModel>, ITapsView
{
    public TapsForm()
    {
        InitializeComponent();
    }

    public TapsForm(TapsPresenter presenter)
        :base(presenter)
    {
        InitializeComponent();
        UpdateModel();
    }

    public IList<Taps> Taps
    {
        set { gridTaps.DataSource = value; }
    }

    private void UpdateModel()
    {
        Model.RideId = Int32.Parse(cboRide.Text);
        Model.Latitude = Double.Parse(txtLatitude.Text);
        Model.Longitude = Double.Parse(txtLongitude.Text);
    }
}

Основная форма MvpForm:

public class MvpForm<TPresenter, TModel> : Form, IView
    where TPresenter : class, IPresenter
    where TModel : class, new()
{
    private readonly TPresenter presenter;
    private TModel model;

    public MvpForm()
    {
    }

    public MvpForm(TPresenter presenter)
    {
        this.presenter = presenter;
        this.presenter.RegisterView(this);
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (presenter != null)
            presenter.IntializeView();
    }

    public TModel Model
    {
        get 
        {
            if (model == null)
                throw new InvalidOperationException("The Model property is currently null, however it should have been automatically initialized by the presenter. This most likely indicates that no presenter was bound to the control. Check your presenter bindings.");

            return model;
        }
        set { model = value;}
    }
}
14
задан jacksonakj 30 March 2010 в 16:03
поделиться

1 ответ

Этот пост помог ответить на мой вопрос.

По-видимому, это ограничение Visual Studio. Я смог обойти его, имея промежуточный класс, который определял общие значения. Это действительно уродливое решение, но теперь я могу открыть форму в Visual Studio.

Вот мой промежуточный класс, который должен быть либо в отдельном файле, либо после определения класса формы. Он также должен иметь конструктор по умолчанию, неявный или явный:

public class MvpTapsForm : MvpForm<TapsPresenter, TapsFormModel>
{
}

Затем в моей реальной форме я наследую от MvpTapsForm.

public partial class TapsForm : MvpTapsForm, ITapsView
{
    public TapsForm()
    {
        InitializeComponent();
    }

    public TapsForm(TapsPresenter presenter)
        : base(presenter)
    {
        InitializeComponent();
        UpdateModel();
    }

    public IList<Taps> Taps
    {
        set { gridTaps.DataSource = value; }
    }

    private void UpdateModel()
    {
        Model.RideId = Int32.Parse(cboRide.Text);
        Model.Latitude = Double.Parse(txtLatitude.Text);
        Model.Longitude = Double.Parse(txtLongitude.Text);
    }
}
12
ответ дан 1 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: