2014-06-19 4 views
5

В настоящее время я работаю над проектом WinForm, в котором есть несколько разных вкладок. Внутри каждой вкладки есть различные элементы управления, такие как кнопки, суб-вкладки, текстовые поля, ect ...Перемещение элементов управления с одной вкладки на другую

Мне нужно консолидировать общее приложение, которое включает в себя взятие определенных элементов управления с одной вкладки и перенос их в другую. Когда я впервые попытался сделать это, я просто копировал и вставлял элементы управления. Как вы можете себе представить, это не сработало из-за того, что я не перемещал свойства с помощью элементов управления, я действительно только что создал NEW на другой вкладке. Поэтому, когда я выполнял код, ничего не работало, потому что не было никакого кода, назначенного новым элементам управления.

Когда я попробовал это снова, на этот раз я CUT и вставлю, который также сохраняет те же свойства, что и старые элементы управления (в частности, имя ссылки в коде), насколько я могу судить, код должен идентифицировать элементы управления по имени и применять те же действия. Однако, когда я компилирую код, приложение успешно создает, но элементы управления не выполняют никаких действий.

На данный момент я не знаю, что делать ...

ответ

0

Я просто проверял. Что происходит, когда вы вырезаете и вставляете элементы управления, вы теряете проводку событий. Что вам нужно сделать после вырезания и вставки, чтобы перейти к управлению properties-events, найдите подходящее событие и справа, выберите метод, который вы хотите обработать с этим событием.

+0

Большое вам спасибо! Это навсегда задирало меня! – DeeWBee

+0

Без проблем, Наслаждайтесь –

2

Когда вы «вырезать» элементы управления, вы разорвать связь между органами управления и их соответствующих мероприятий. Когда вы снова вставляете их, они больше не подключаются к событиям, поэтому они не отображаются в do.

Методы «события» все равно должны присутствовать в вашем коде, но вам придется вручную пройти и подписать каждое событие для каждого элемента управления снова (через окно «Свойства»).

В качестве альтернативы, вернуть эти изменения, затем откройте файл .Designer.cs и искать что-то вроде этого:

this.tabPage1.Controls.Add(this.dataGridView1); 

Which (к примеру) помещает dataGridView1 внутри tabPage1.

Если вы хотите переместить DataGridView на другую вкладку TabPage, вы можете просто изменить this.tabPage1 в приведенном выше коде на this.tabPage2.

this.tabPage2.Controls.Add(this.dataGridView1); 

Тогда вы можете перевернуть обратно к мнению дизайнера и регулируйте вокруг туда, где вы хотите его в TabPage.

+0

Большое спасибо за предложение. Ты прав. Я хочу переместить их во время управления. Насколько я могу судить, когда я перемещаю элементы управления с одной вкладки на другую, автоматически сгенерированный код уже редактирует ее самостоятельно. – DeeWBee

+0

Когда вы перемещаете элементы управления вокруг, автоматически сгенерированный код в файле Designer.cs обновляется правильно, и вы не теряете связь между элементами управления и их событиями. Но когда вы вырезаете и затем вставляете, только некоторые из автоматически сгенерированного кода обновляются правильно. Часть, которая соединяет ваши элементы управления с правильными событиями, теряется, и это то, что вы испытываете. –

+0

Чтобы немного поработать ... да, код Designer.cs автоматически генерируется, когда вы отбрасываете элементы управления в своей форме и перемещаете их. Но вы также можете зайти в файл Designer.cs и вручную внести изменения. Поместите элемент управления в свою форму, затем зайдите в файл Designer.cs и измените местоположение. Когда вы вернетесь к проектной схеме, вы увидите, что элемент управления был перемещен в новое место. –

1

Это вырезает их из первой вкладки и вставляет их на второй, я думаю, вы можете делать это так часто, как хотите. И с небольшим изменением вы можете сделать это по-настоящему копией. надеюсь, что это помогает

private void ControlsToTabPage(TabPage from, TabPage to) 
    { 
     Control[] ctrlArray = new Control[from.Controls.Count]; 
     from.Controls.CopyTo(ctrlArray, 0); 
     to.Controls.AddRange(ctrlArray); 
    } 
+1

Похоже, что OP пытается консолидировать элементы управления во время разработки. Это применимо, если DeeWBee хочет перемещать элементы управления каждый раз, когда приложение запускается, но когда приложение заканчивается, элементы управления все равно будут находиться в исходных вкладках в дизайнере. –

+0

Большое спасибо за предложение! Очень ценю помощь. Должен ли я вводить этот бит кода для каждого отдельного элемента управления? (Потому что их много). Или он просто берет все элементы управления с одной вкладки и перемещает их в другую. – DeeWBee

+0

Грант прав о том, что я хочу делать. T.S. похоже, решил. Благодаря! – DeeWBee

1

Используйте схему документа.

Просмотреть ... Другие окна ... План документа.

Выберите необходимый компонент и перетащите его с одной вкладки на другую в дереве управления. Я сделал это, и действия сохраняются на новой вкладке.

2

Перетащите элемент из элемента управления вкладки и на форму. Перейдите на другую вкладку. Затем перетащите элемент на эту вкладку. Это, по существу, 2 движения перетаскивания, но так как вы никогда не срезаете, сохраняется вся привязка кодов. Если элемент управления вкладками занимает всю форму, просто уменьшите его, выполнив предыдущие шаги, а затем сделайте его большим, когда закончите.

+0

Это отлично работает. Я также использовал его, когда захотел создать вкладки после того, как у меня было много элементов управления в моей форме, и я хотел поместить некоторые элементы управления на одной вкладке и некоторые элементы управления на другой вкладке. Я только что выбрал вкладку, а затем перетащил элементы управления из формы на эту вкладку. @DeeWBee, вы можете подумать о выборе этого ответа в качестве предпочтительного метода, поскольку он был добавлен намного позже. – DanG

+0

@DanG Спасибо. Я тоже это сделал. Еще один совет: если я перемещаю кучу элементов управления между вкладками одновременно, я создам группу на вкладке, перетаскиваю элементы в группу, перетаскиваю группу в форму, затем перетаскиваю группу на новую вкладку и наконец, перетащите элементы управления из группы. Контейнер группы делает это так, что я могу сделать все вместе, не создавая беспорядка. – Webmasterjeff

Смежные вопросы