回答編集履歴

1

追記

2018/06/09 16:13

投稿

YAmaGNZ
YAmaGNZ

スコア10222

test CHANGED
@@ -1,6 +1,6 @@
1
1
  こちらの方法は、設定の画面の「種類」を増やす方法ではありません。
2
2
 
3
- ```Properties.Settings.Default.Lines```とList<string>の項目を
3
+ Properties.Settings.Default.LinesとList<string>の項目を
4
4
 
5
5
  追加するコードになります。
6
6
 
@@ -9,3 +9,171 @@
9
9
 
10
10
 
11
11
  デザイナ上の「種類」を追加する方法に関しては、私もわかりません。
12
+
13
+
14
+
15
+ ### 追記
16
+
17
+ DLLを作成しての方法ですが、以下のようにしたところ、設定のデザイナ上でも設定でき、プログラム上からも
18
+
19
+ 値の保存ができました。
20
+
21
+
22
+
23
+ DLL側
24
+
25
+ ```C#
26
+
27
+ using System;
28
+
29
+ using System.ComponentModel;
30
+
31
+ using System.Globalization;
32
+
33
+
34
+
35
+ namespace TestDLL
36
+
37
+ {
38
+
39
+ [TypeConverter(typeof(CustomClassConverter))]
40
+
41
+ public class TestClass1
42
+
43
+ {
44
+
45
+ public int Test { get; set; }
46
+
47
+ public string Test2 { get; set; }
48
+
49
+ }
50
+
51
+
52
+
53
+ public class CustomClassConverter : ExpandableObjectConverter
54
+
55
+ {
56
+
57
+ //コンバータがオブジェクトを指定した型に変換できるか
58
+
59
+ //(変換できる時はTrueを返す)
60
+
61
+ public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
62
+
63
+ {
64
+
65
+ if (destinationType == typeof(TestClass1))
66
+
67
+ return true;
68
+
69
+ return base.CanConvertTo(context, destinationType);
70
+
71
+ }
72
+
73
+
74
+
75
+ //指定した値オブジェクトを、指定した型に変換する
76
+
77
+ public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
78
+
79
+ {
80
+
81
+ if (destinationType == typeof(string) && value is TestClass1)
82
+
83
+ {
84
+
85
+ TestClass1 cc = (TestClass1)value;
86
+
87
+ return cc.Test.ToString() + "," + cc.Test2;
88
+
89
+ }
90
+
91
+ return base.ConvertTo(context, culture, value, destinationType);
92
+
93
+ }
94
+
95
+
96
+
97
+ //コンバータが特定の型のオブジェクトをコンバータの型に変換できるか
98
+
99
+ //(変換できる時はTrueを返す)
100
+
101
+ //ここでは、String型のオブジェクトなら変換可能とする
102
+
103
+ public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
104
+
105
+ {
106
+
107
+ if (sourceType == typeof(string))
108
+
109
+ return true;
110
+
111
+ return base.CanConvertFrom(context, sourceType);
112
+
113
+ }
114
+
115
+
116
+
117
+ //指定した値をコンバータの型に変換する
118
+
119
+ public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
120
+
121
+ {
122
+
123
+ if (value is string)
124
+
125
+ {
126
+
127
+ string[] c = value.ToString().Split(new char[]{','},2);
128
+
129
+ TestClass1 cc = new TestClass1();
130
+
131
+ cc.Test = int.Parse(c[0]);
132
+
133
+ cc.Test2 = c[1];
134
+
135
+
136
+
137
+ return cc;
138
+
139
+ }
140
+
141
+ return base.ConvertFrom(context, culture, value);
142
+
143
+ }
144
+
145
+ }
146
+
147
+ }
148
+
149
+
150
+
151
+ ```
152
+
153
+
154
+
155
+ 下図のようにデザイナ上で設定でき
156
+
157
+ ![イメージ説明](c88fc62d6015720ec4d6fa70889a720a.png)
158
+
159
+
160
+
161
+ 保存結果はこうなりました。
162
+
163
+ ```XML
164
+
165
+ <userSettings>
166
+
167
+ <WindowsFormsApp1.Properties.Settings>
168
+
169
+ <setting name="Test" serializeAs="String">
170
+
171
+ <value>123,ABC</value>
172
+
173
+ </setting>
174
+
175
+ </WindowsFormsApp1.Properties.Settings>
176
+
177
+ </userSettings>
178
+
179
+ ```