"Незаконные персонажи в пути". Visual Studio WinForm Design View - PullRequest
14 голосов
/ 30 марта 2010

Я собираю легкий шаблон MVP для проекта WinForms. Все компилируется и работает нормально. Однако, когда я пытаюсь открыть WinForm в режиме разработки в Visual Studio, я получаю сообщение об ошибке « Недопустимые символы в пути ». Мой WinForm использует дженерики и наследует от базового класса Form. Есть ли проблема с использованием обобщений в WinForm?

Вот WinForm и базовый класс Form.

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;}
    }
}

1 Ответ

12 голосов
/ 30 марта 2010

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

Видимо, это ограничение в 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...