Я использую C # в Windows Forms для создания UserControl
.Это мой первый .NET UserControl
, но в прошлом я создал много пользовательских компонентов в Delphi, так что это не совсем незнакомая концепция.
Мой новый элемент управления - это временная шкала, похожая на те, что наблюдаются при редактировании видео.программное обеспечение, в котором вы можете разместить видео и аудио на различных каналах.Мой элемент управления также может содержать несколько каналов.Я создал элемент управления в качестве основной временной шкалы и еще один элемент управления, который становится каналом при добавлении к временной шкале.Я создал коллекцию объектов Channel как свойство временной шкалы, и в режиме разработки он предоставляет мне редактор коллекций, чтобы я мог добавлять, изменять и удалять каналы.Я создал объект Channel Serializeable
, и коллекция созданных мной каналов сохраняется в том виде, в котором я поместил временную шкалу.
Что я хотел бы сделать, это выйти изРедактор коллекции, временная шкала обновлена для отображения объектов канала.В настоящее время они существуют на временной шкале, но не отображаются на временной шкале.Очевидно, что они должны быть добавлены в коллекцию Controls объекта Timeline, но я затрудняюсь понять, где я должен это сделать.Возникает ли какое-либо событие, которое говорит о том, что Коллекция изменилась, и я могу затем пойти и добавить или удалить каналы из отображаемой временной шкалы?
Вот мой код для элемента управления временной шкалой:
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.ComponentModel.Design;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace CMSTimeline
{
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class CMSTimeline : UserControl
{
// The collection of Channels
private Collection<TimelineChannel> channels = new Collection<TimelineChannel>();
public CMSTimeline()
{
InitializeComponent();
}
// The property that exposes the collection of channels to the object inspector
[Category("Data")]
[Description("The Timeline channels")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Collection<TimelineChannel> Channels
{
get { return channels; }
set { channels = value; }
}
}
class CMSTimelineDesigner : ControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);
CMSTimeline uc = component as CMSTimeline;
}
}
}
А вот и код объекта Channel.
using System;
using System.Windows.Forms;
namespace CMSTimeline
{
[Serializable]
public partial class TimelineChannel : UserControl
{
public TimelineChannel()
{
InitializeComponent();
UICaption.Text = "Channel";
}
public TimelineChannel(string aCaption)
{
InitializeComponent();
UICaption.Text = aCaption;
}
public string Caption
{
get
{
return UICaption.Text;
}
set
{
UICaption.Text = value;
}
}
}
}
Все остальное работает просто отлично.Мой элемент управления временной шкалой отображается на панели инструментов, и я могу удалить его в своей форме.
Когда я выбираю временную шкалу, отображаются ее свойства, включая свойство «Каналы», которое отображается как коллекция, как и ожидалось.При нажатии кнопки [...] открывается редактор коллекции по умолчанию (который я мог бы изменить позже), и я могу добавлять и удалять каналы по мере необходимости.Когда я закрываю редактор, каналы существуют (я могу видеть как минимум файл формы Designer.cs), но я хочу, чтобы они появлялись в объекте временной шкалы.
Итак, как мне добавить их на временную шкалу?Органы управления?