2017-02-17 14 views
-1

Я совершенно новое в .NET-приложений, и я пытаюсь создать TableLayoutPanel с Label и двумя кругами:Добавление фигур рядом с другими формами внутри TableLayoutPanel ячейки C# .NET

Image

Для делая это, я создаю объекты с меткой и 2 кругов и сверху (там, где у меня есть TableLayoutPanel) Я пытаюсь добавить эти элементы к ячейке:

this.cellTableLayoutPanel.Controls.Add(this.devList[rowCount].devNameLabel, 0, rowCount); 
this.cellTableLayoutPanel.Controls.Add(this.devList[rowCount].circle_in, 0, rowCount); 

элементы: (этикетки devNameLabel, System.Windows .Sha pes.Ellipse circle_in)

Я не могу понять, как это сделать, поскольку он не позволяет мне добавить круг в ячейку таблицы. Я хотел бы добавить 3 элемента и добавить маркер слева от ячейки, чтобы установить их положение.

Я искал какое-то время, но я не нашел, как это выполнить. Кто-нибудь знает? Большое спасибо!

+0

Elllipse не является результатом класса Control, поэтому его нельзя помещать в ячейку таблицы. Вместо этого подумайте о создании UserControl. Или, что более разумно, вывести свой собственный класс из Control и использовать его событие Paint, чтобы нарисовать этот материал. Делает ваш пользовательский интерфейс * много быстрее. –

ответ

0

Ellipse является элементом WPF и не может быть размещен непосредственно на элементах форм Windows, поскольку это не Control.

Что такое WPF Ellipse в Windows Forms?

В Windows Forms, чтобы иметь форму по форме, вы можете использовать Visual Studio PowerPacks Controls как Line, Oval и Rectangle, которые составляют Shape.

Вы можете опустить Shape на номер Form или Panel и использовать их. Но даже с помощью PowerPack Shape Вы не можете разместить Shape непосредственно в Control с использованием кода.

Примечание 1: При использовании дизайнера вы можете опустить Shape на Form, но TableLayoutPanel вы не можете оставить Shape с помощью дизайнера на TableLayoutPanel!

Примечание 2: Кроме того, при попытке добавить Shape в Controls коллекцию с помощью кода, вы увидите, вы не можете добавить его в Controls коллекцию!

Используя дизайнер, почему я могу разместить Shape в форме или в панели но не в TableLayoutPanel?

Фактически, когда вы бросаете фигуру на форму, дизайнер создает невидимый ShapeContainer, которому принадлежит Shape. Shape будет нарисован на поверхности ShapeContainer, а ShapeContainer размещен по адресу Form или Panel. Это дизайнерский трюк.

Для TableLayoutPanel эта функция не реализована в дизайнере.

Как добавить форму в коллекцию элементов управления с помощью кода?

Вы можете добавить Shape к ShapeContainer, а затем добавить к PanelTableLayoutPanel:

var container = new ShapeContainer(); 
var oval = new OvalShape(container) { Width = 20, Height = 20 }; 
this.tableLayoutPanel1.Controls.Add(container, 0, 0); 

Есть ли другие альтернативы?

Да, в качестве альтернативы, вы можете создать свой собственный контроль над Овалом просто путем получения Control и переопределения метода OnPaint.