none
ColorDialogの作成した色の再表示方法 RRS feed

  • 質問

  • お世話になります。

    Vista, VS2008で、ColorDialogを表示し、"色の作成"ボタンで新規色を作成しColorDialog内の"作成した色"に登録します。

    このアプリケーションを一度終了し、再度立ち上げColorDialogを表示した時、"作成した色"には前回作成した色が残っていません

    どのようにすれば、"作成した色"を保存することができるのでしょうか。

    何方かご存じの方、ご教授よろしくお願いします。

    2010年10月2日 0:17

回答

  • >CustomColorsの構造が判らないので、これ以上どうすれば良いのか困っています。

     

    外池さんの仰る通り、VBであればInteger型の配列でCustomColorsを取得可能です。

    以下簡単なサンプルです。

     

    ※前提:フォーム上に、Button1、Button2、Button3が配置されているものとする

    Public Class Form1
    
      ' カラーダイアログ
      Private cd As New ColorDialog()
    
      ' カラーダイアログ表示ボタン
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        cd.ShowDialog()
      End Sub
    
      ' カスタムカラー保存ボタン
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim sfd As New SaveFileDialog()
        sfd.FileName = "CustomColor.dat"
        If sfd.ShowDialog() = DialogResult.OK Then
          Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(Integer()))
          Dim fs As New System.IO.FileStream(sfd.FileName, System.IO.FileMode.Create)
          serializer.Serialize(fs, cd.CustomColors)
          fs.Close()
          MessageBox.Show("保存しました")
        End If
      End Sub
    
      ' カスタムカラー読込ボタン
      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim ofd As New OpenFileDialog()
        ofd.FileName = "CustomColor.dat"
        If ofd.ShowDialog() = DialogResult.OK Then
          Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(Integer()))
          Dim fs As New System.IO.FileStream(ofd.FileName, System.IO.FileMode.Open)
          cd.CustomColors = CType(serializer.Deserialize(fs), Integer())
          fs.Close()
          MessageBox.Show("読込みました")
        End If
      End Sub
    End Class
    
    

     

    ボタン1を押すとカラーダイアログが表示されます。

    その状態でカスタムカラーを作成し、カラーダイアログを終了します。

    その後ボタン2で任意の場所にカスタムカラー情報を保存します。

    一旦アプリケーションを終了します。

    再度アプリケーションを起動し、ボタン3で、保存したファイルを読み込みます。

    ボタン1を押すと、カスタムカラーが復元されたカラーダイアログが表示されます。

    2010年10月2日 2:41

すべての返信

  • >このアプリケーションを一度終了し、再度立ち上げColorDialogを表示した時、"作成した色"には前回作成した色が残っていません

    >どのようにすれば、"作成した色"を保存することができるのでしょうか。

     

    前回作成した色を、ダイアログに渡してあげる必要があります。

    アプリケーションを終了する前に、作成した色全てをファイル等に保存しておき、

    それを次回起動時に読込み、ダイアログに渡すなどの方法が考えられます。

    ダイアログへ渡す方法は以下を参考にされるといいと思います。

    http://dobon.net/vb/dotnet/form/colordialog.html

    2010年10月2日 0:29
  • 作成した色は ColorDialog の CustomColors プロパティに格納されています。

    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.colordialog.customcolors.aspx

    ダイアログを閉じたときに CustomColors の値を取り出してファイルに保存し、次回開くときはファイルから読み込んでCustomColorsプロパティに設定する、ということが必要ではないでしょうか。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年10月2日 0:42
  • なかむら様、honefai様

    ご教授ありがとうございます。

    CustomCloorsの値を利用すれば解決できると判りました。

    ご提示して頂いた、サンプルではCustomColors の値を取り出す方法が無く、困っています。

    Dim ColorArray As Array
    ColorArray = ColorDialog1.CustomColors.ToArray

    としても、上手くCustomColorsの内容を取り出せません。

    CustomColorsの構造が判らないので、これ以上どうすれば良いのか困っています。

    お手数をおかけしますが、ヒントを頂ければ幸いです。

    よろしくお願いします。

    2010年10月2日 2:21
  • 外池と申します。

    ColorDialogのCustomColorsのドキュメントはご覧になりました?
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.colordialog.customcolors.aspx

    戻り値はint32[]であるとされていますが?


    (ホームページを再開しました)
    2010年10月2日 2:36
  • >CustomColorsの構造が判らないので、これ以上どうすれば良いのか困っています。

     

    外池さんの仰る通り、VBであればInteger型の配列でCustomColorsを取得可能です。

    以下簡単なサンプルです。

     

    ※前提:フォーム上に、Button1、Button2、Button3が配置されているものとする

    Public Class Form1
    
      ' カラーダイアログ
      Private cd As New ColorDialog()
    
      ' カラーダイアログ表示ボタン
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        cd.ShowDialog()
      End Sub
    
      ' カスタムカラー保存ボタン
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim sfd As New SaveFileDialog()
        sfd.FileName = "CustomColor.dat"
        If sfd.ShowDialog() = DialogResult.OK Then
          Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(Integer()))
          Dim fs As New System.IO.FileStream(sfd.FileName, System.IO.FileMode.Create)
          serializer.Serialize(fs, cd.CustomColors)
          fs.Close()
          MessageBox.Show("保存しました")
        End If
      End Sub
    
      ' カスタムカラー読込ボタン
      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim ofd As New OpenFileDialog()
        ofd.FileName = "CustomColor.dat"
        If ofd.ShowDialog() = DialogResult.OK Then
          Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(Integer()))
          Dim fs As New System.IO.FileStream(ofd.FileName, System.IO.FileMode.Open)
          cd.CustomColors = CType(serializer.Deserialize(fs), Integer())
          fs.Close()
          MessageBox.Show("読込みました")
        End If
      End Sub
    End Class
    
    

     

    ボタン1を押すとカラーダイアログが表示されます。

    その状態でカスタムカラーを作成し、カラーダイアログを終了します。

    その後ボタン2で任意の場所にカスタムカラー情報を保存します。

    一旦アプリケーションを終了します。

    再度アプリケーションを起動し、ボタン3で、保存したファイルを読み込みます。

    ボタン1を押すと、カスタムカラーが復元されたカラーダイアログが表示されます。

    2010年10月2日 2:41
  • Honefai様、外池様、なかむら様

    いろいろご教授頂きありがとうございました。

    特にHonefai様には、詳細なサンプルを頂きありがとうございました。

    お陰さまで、解決できました。

    今後も精進していきたいと思います。

    ありがとうございました。

    2010年10月2日 3:14