private void InitializeList() { for(int i=0; i<10; ++i) { ParameterLightSet lightSet = new ParameterLightSet(); lightSet.ID = i; lightSet.Comment = "comment " + i; lightSet.a = 0.5f * i; lightSet.b = 0.5f * i; lightSet.c = 0.5f * i; _AddLightSetParameter(lightSet); } }
private void _AddLightSetParameter(ParameterLightSet parameter) { // 初めてリストを作成する場合 if(!m_parameterList.ContainsKey(KeyLightSet)) { // リストの作成 m_parameterList.Add(KeyLightSet, new List<ParameterBase>()); // ビューの作成 listView1.Columns.Clear(); Type t = typeof(ParameterLightSet); var memberInfo = t.GetMembers(); foreach (var member in memberInfo) { if ((member.MemberType & (System.Reflection.MemberTypes.Field | System.Reflection.MemberTypes.Property)) > 0) { listView1.Columns.Add(member.Name); } } } // ビューの項目用データ作成 List<string> items = new List<string>(); Type type = typeof(ParameterLightSet); var info = type.GetMembers(); foreach (var member in info) { if (System.Reflection.MemberTypes.Field == member.MemberType) { FieldInfo field = type.GetField(member.Name); items.Add(field.GetValue(parameter).ToString()); } else if (System.Reflection.MemberTypes.Property == member.MemberType) { PropertyInfo property = type.GetProperty(member.Name); object o = property.GetValue(parameter); if(null != o) { items.Add(o.ToString()); } } } // リストにデータの追加 int index = 0; foreach(var item in m_parameterList[KeyLightSet]) { // 既にIDが存在している if(item.ID == parameter.ID) { break; } ++index; } // IDが存在していない場合 if (m_parameterList[KeyLightSet].Count == index) { m_parameterList[KeyLightSet].Add(parameter); // ビューの追加 ListViewItem item = new ListViewItem(items.ToArray()); listView1.Items.Add(item); } else { // レコードの上書き m_parameterList[KeyLightSet][index].CopyFrom(parameter); // ビューのデータに反映 ListViewItem item = new ListViewItem(items.ToArray()); for (int itemIndex = 0; itemIndex < listView1.Items.Count; ++itemIndex ) { ListViewItem listItem = listView1.Items[itemIndex]; // 最初の項目(ID)が一致している行の変更 if (listItem.Text == item.Text) { listView1.Items[itemIndex] = item; break; } } } }
/// <summary> /// レコードのダイアログ表示 /// </summary> /// <param name="mode">表示モード</param> private void _OpenRecordDialog(RecordListDialog.InsertMode mode) { m_recordListDialog.Mode = mode; m_recordListDialog.IdList = m_parameterList[KeyLightSet]; if (1 <= listView1.SelectedItems.Count) { m_recordListDialog.CopyBaseId = int.Parse(listView1.SelectedItems[0].Text); } DialogResult result = m_recordListDialog.ShowDialog(); if (DialogResult.OK == result) { // レコードの追加 ParameterLightSet parameter = new ParameterLightSet(); if (RecordListDialog.InsertMode.ADD == mode) { parameter.ID = m_recordListDialog.NewId; parameter.Comment = m_recordListDialog.NewComment; } else { // パラメータのコピー } _AddLightSetParameter(parameter); } }