Winform: Почему я не могу переместить экземпляр из InitializeComponent? - PullRequest
0 голосов
/ 03 декабря 2010

Visual Studio создал этот код:

    private void InitializeComponent()
    {

        this.trackBar1 = new System.Windows.Forms.TrackBar();

Я просто хочу сделать это вместо этого:

    private void instantiate()
    {

        this.trackBar1 = new System.Windows.Forms.TrackBar();
    }

    private void InitializeComponent()
    {

        instantiate();

Программа компилируется и выполняется, но Visual Studio не может нарисовать элемент управления на winformбольшеКак это исправить?

Обновление: я знаю, что код генерируется автоматически, но почему при запуске во время выполнения, а не во время разработки, он не выполняется как обычный код c #?

Я действительно подозреваю, что Microsoft, как Apple, делает все, чтобы кодировщикам было сложно привязать их к своим идеям. Вы должны быть настоящим Шерлоком Холмсом для расследования

Ответы [ 4 ]

4 голосов
/ 03 декабря 2010

InitializeComponent() - метод, автоматически сгенерированный дизайнером. Если вы измените его, дизайнер может не загрузить ваш элемент управления, и могут произойти другие забавные вещи.

Чего именно вы хотите достичь?

2 голосов
/ 03 декабря 2010

Обратите внимание на сообщение об ошибке, которое показывает дизайнер:

Метод 'System.Windows.Forms.Form.instantiate' не найден.

Он жалуется на то, что в классе Form отсутствует метод instance , а не в классе, производном от формы, в котором есть метод. Это неизбежно, тип еще не существует, пока не десериализован, он может отражать только членов базового класса.

Но да, не делайте этого, ваш код будет растоптан, как только дизайнер повторно сериализует форму и сгенерирует метод InitializeComponent (). Редактирование этого метода гарантирует потерю. Почему вы хотите это сделать, не ясно. Вы можете создать базовую форму с помощью собственного конструктора и наследовать его.

1 голос
/ 03 декабря 2010

Если вы хотите добавить элементы управления и т. Д. В форму без использования дизайнера, сделайте это в своем методе instantiate(), но вызовите instantiate() из конструктора элемента управления, а не путем редактирования метода InitializeComponent().

Никогда не бывает хорошей идеей вручную редактировать метод, созданный и поддерживаемый IDE (в этом отношении, ручное редактирование любого кода, полученного из генератора кода, поможет вамв беде).

1 голос
/ 03 декабря 2010

Visual Studio показывает только то, что находится в вашем файле * .designer.cs.Если вы переместите что-то вне этого, оно не будет знать, какие элементы управления вы хотите отобразить.

Если вы создаете элемент управления вне InitializeComponent, не забудьте добавить его в коллекцию Control формы.

this.Controls.Add(trackBar1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...