다음 클래스 (Windows Forms 컨트롤)는 목록 컨트롤의 한 유형으로 과 ListControlItem
은 Windows를 상속하지 않습니다 제어 클래스.Visual Studio 디자이너는`Windows.Forms.Control`의`List <T>`멤버에 대한 코드를 생성하지 않습니다.
public class ListControl : Control
{
private List<ListControlItem> items;
public ListControl()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.items = new List<ListControlItem>();
}
public List<ListControlItem> Items
{
get { return items; }
set { items = value; }
}
}
문제는 디자인 타임에, Visual Studio를 대신 각 항목의 인스턴스에 대한 코드를 만든 다음 ListView
과와 같은 컨트롤에 추가하는, 양식의 리소스 파일 목록의 내용을 직렬화하려고한다 ListViewItem
. ListControl
에 대한
비주얼 스튜디오 디자인 생성 된 코드 : ListView
를 들어
this.listControl1.Items = ((System.Collections.Generic.List<ListControlItem>)(resources.GetObject("listControl1.Items")));
:
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("");
System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("");
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("");
System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("");
this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3,
listViewItem4,
listViewItem5,
listViewItem6});
나는 ListView
는 "자신의 목록 클래스가이 문제를 해결하기 위해 ListView
및 ListViewItem
검색을 시도 "ListViewItemCollection
은 인터페이스 IList, ICollection, IEnumerable
을 구현하지만 List<T>
은 구현합니다. 같은 인터페이스.
사용자 지정 직렬화를 구현해야합니까? 아마 이것은 단지 자원 파일에 직렬화 될 것입니다. Windows Forms Control 기본 클래스를 상속받지 않으므로 많은 설명서를 찾을 수 없습니다. List<T>
속성의 속성 [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
퍼팅
UPDATE
List<T>
각 항목에 대한 하나 개의 자원을 제공한다.
this.listControl1.Items.Add(((ListControlItem)(resources.GetObject("listControl1.Items"))));
this.listControl1.Items.Add(((ListControlItem)(resources.GetObject("listControl1.Items1"))));
this.listControl1.Items.Add(((ListControlItem)(resources.GetObject("listControl1.Items2"))));
this.listControl1.Items.Add(((ListControlItem)(resources.GetObject("listControl1.Items3"))));
this.listControl1.Items.Add(((ListControlItem)(resources.GetObject("listControl1.Items4"))));
this.listControl1.Items.Add(((ListControlItem)(resources.GetObject("listControl1.Items5"))));
ListControlItem
에 대한 사용자 지정 직렬화 구현이 도움이됩니다.
달성하기를 원하십니까? 문제를 해결할 다른 방법이있을 수 있습니다. – Octopoid
'ListView '와 같습니다. Visual Studio 디자이너가 리소스 파일을 저장하는 대신 각 ListControlItem에 대한 코드를 생성하게하십시오. –
AFAIK이 작업을 수행하려면 [CodeDOM] (https://msdn.microsoft.com/en-us/library/y2k85ax6.aspx)을 사용해야합니다. 이렇게하면 코드가 부분 디자이너 클래스에 생성되는 방법을 정의 할 수 있습니다. – Octopoid