2011-07-15 4 views
1

通常、コード内で手動でデータ型を変更することで、アプリケーションの設定で配列を作成できます。しかし、System.Drawing.Colorは例外であるようです。通常はコードに追加することができ、他の設定と同様にグラフィカルエディタの値を編集することもできます。それは、それがその後失われるので、データをシリアル化する問題があるようです。.NETアプリケーションの設定:色の値の配列を作成

<Setting Name="ChannelColour" Type="System.Drawing.Color[]" Scope="User"> 
    <Value Profile="(Default)"><?xml version="1.0" encoding="utf-16"?> 
    <ArrayOfColor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <color>Cyan</color> 
     <color>DarkOrange</color> 
     <color>Magenta</color> 
     <color>LawnGreen</color> 
    </ArrayOfColor> 
    </Value> 
</Setting> 

、同様のapp.configに:

私は、エディタを考えて、コード内のメソッドを探したので、設定ファイルでこれを試してみました、どこかのバグを持っていた

<setting name="ChannelColour" serializeAs="Xml"> 
    <value> 
    <ArrayOfColor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <color>Cyan</color> 
     <color>DarkOrange</color> 
     <color>Magenta</color> 
     <color>LawnGreen</color> 
    </ArrayOfColor> 
    </value> 
</setting> 

私はエディタに触れていないし、既存の設定ファイルをすべて削除しました。それでも動作しませんでした。

なぜ他の配列が正常に動作し、独自のColor値がデフォルトオプションの1つですが、その組み合わせはまったく機能しません。最後に

答えて

1

私はこのようにそれをやった:

まず私は基本的に一つだけの主な違い(イベント処理)とColor[]のラッパーだったColorCollectionと呼ばれるクラスを追加しました。

はColorCollectionために設定クラスにプロパティを追加し、私は手動で設定ローディングを用いて、私はColorCollectionToStringParse)でオーバーロード/追加の方法を使用してイベントハンドラを保存設定StringCollectionとして設定記憶されています。

変更し、配列の添字はPropertyChangedイベントをトリガしていないので、私は、新しいイベントを追加しました私たちは手動でも、内からそれを呼び出すことはできませんので(PropertyChangedは別のクラスで定義されている他のクラスによって呼び出すことができChangedと呼ばれますSettingsクラス。私はsetステートメントにイベントトリガーを追加しました

これは面倒ですが、少なくともある程度の抽象度があるので、厄介なものはすぐには見えません。サブスクリプトが変更された場合にイベントをトリガする必要があるため、設定に必要です。

関連する問題