コンテンツへ移動
2018/09/02 / Azulean

色選択ダイアログ(ColorDialog)の作成した色の保存

わんくまさんネタです。

ColorDialog クラスでは AllowFullOpen プロパティがデフォルトの True であれば、色の作成ボタンから基本色以外を選択すること、作成することができます。

image

ただし、何も実装しなければ、この ColorDialog クラスのインスタンスがなくなった時点で作成した色は失われます。

 

保存するためにはこの ColorDialog クラスの CustomColors プロパティから色を取り出して保存しておき、次回表示時に設定してあげる必要があります。

例:XmlSerializerやBinaryFormatterを使う

何も考えずに1ファイルにこの色情報だけを保存するのであれば、XmlSerializerやBinaryFormatterを使えばそれで終わります。

XmlSerializerの例

private void LoadCustomColors(string filePath, ColorDialog targetColorDialog)
{
    using (var stream = new FileStream(filePath, FileMode.Open))
    {
        var xmlSerializer = new XmlSerializer(typeof(int[]));
        targetColorDialog.CustomColors = (int[])xmlSerializer.Deserialize(stream);
    }
} private void SaveCustomColors(string filePath, ColorDialog sourceColorDialog) {
    using (var stream = new FileStream(filePath, FileMode.Create))
    {
        var xmlSerializer = new XmlSerializer(typeof(int[]));
        xmlSerializer.Serialize(stream, sourceColorDialog.CustomColors);
    }
}

BinaryFormatterの例

private void LoadCustomColors(string filePath, ColorDialog targetColorDialog)
{
    using (var stream = new FileStream(filePath, FileMode.Open))
    {
        var formatter = new BinaryFormatter();
        targetColorDialog.CustomColors = (int[])formatter.Deserialize(stream);
    }
} private void SaveCustomColors(string filePath, ColorDialog sourceColorDialog)
{
    using (var stream = new FileStream(filePath, FileMode.Create))
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(stream, sourceColorDialog.CustomColors);
    }
}

 

これらのサンプルメソッドの内、LoadCustomColors メソッドは Form の Load イベント(やコンストラクタ)、ダイアログの表示直前といったタイミングで呼び出してください。

LoadCustomColors(@"(ファイル名)", colorDialog1);

SaveCustomColors メソッドは Form の FormClosed イベントなどで呼び出してください。

SaveCustomColors(@"(ファイル名)", colorDialog1);

プロジェクトの設定(Properties.Settings)に保存したい

先の例はお手軽なものの、1ファイルに1つの情報だけを保存するのは微妙なので、もう一例紹介しておきます。

設定の構造にはデフォルトで int[] を扱える型がないので文字列で扱う例です。

あらかじめ、プロジェクトのプロパティの設定タブから ColorSettings という文字列型の設定値を「ユーザー」スコープで追加しておいてください。

image

以下は int 型配列を文字列に変えて、「,(カンマ)」区切りで連結しています。

private void LoadCustomColors(ColorDialog targetColorDialog)
{
    targetColorDialog.CustomColors =
        Properties.Settings.Default.ColorSettings.Split(new[] {','}, 16).Select(int.Parse).ToArray();
} private void SaveCustomColors(ColorDialog sourceColorDialog) {
    Properties.Settings.Default.ColorSettings = string.Join(",", sourceColorDialog.CustomColors);
    Properties.Settings.Default.Save();
}

こちらのサンプルメソッドは、LoadCustomColors メソッドを Form の Load イベントで呼び出す、SaveCustomColors メソッドを Form の FormClosed イベントで呼び出すといった想定です。

LoadCustomColors(colorDialog1);
SaveCustomColors(colorDialog1);

メソッドを分けずに、それらのイベントハンドラに直接中身を書く形でも良いでしょう。

2018/02/25 / Azulean

Visual Studio 2017で作成したいプロジェクトがない=プロジェクトを作成できない場合

以前の記事 にも挙げましたが、Visual Studio 2017 はデフォルトでインストールすると「何もできない Visual Studio」となります。

新規に作ろうとしても「空のソリューション」だけとなってしまいます。

対応方法としては、この画面の左下の Visual Studio インストーラーを開くをクリックするか、スタートメニューの Visual Studio Installer を起動してください。
インストーラーで「変更」ボタンをクリックすると、ワークロードの選択画面になりますので、自分のやりたいことに応じて選択しましょう。

 

VB.NET や C# でデスクトップアプリケーションを作りたい方

「.NET デスクトップ開発」を選んでください。

msdn20170701_2

C++ でデスクトップアプリケーションを作りたい方

「C++によるデスクトップ開発」を選んでください。

ストアアプリ(UWP)を作りたい方

言語を問わず、UWP アプリ開発を希望する方は「ユニバーサルWIndowsプラットフォーム開発」を選んでください。


この記事用の短縮 URL は https://wp.me/p19AcI-8q です。

2017/07/01 / Azulean

Visual Studio 2017のインストール時の選択

Visual Studio 2017はインストーラーがこれまでと大きく変わっています。
基本的にはやりたいことベースに選べば必要なコンポーネントがインストールされますので、きちんと目的で選びましょう。
もちろん、複数同時に選んでも良いので、可能性があるのならあらかじめチェックを入れておくのも手です。その分、ダウンロードやインストールに時間がかかったり、ディスクの領域を多く消費しますのでご注意ください。

 

  • .NETデスクトップ開発
    C#やVB.NETでWindowsフォームアプリケーション、コンソールアプリケーション、WPFアプリケーションなど、昔からある方法で、.NETアプリケーションを開発するケース
    多くのC#、VB.NETのWindowsアプリ開発者の方はこれにチェックを入れておいた方が良いでしょう。
    (これを選択してもC++/CLIではWindowsフォームアプリケーションの新規開発はできなくなっています。2012から非推奨になっているためです

 

  • C++によるデスクトップ開発
    C++を使ったWin32プロジェクト、ATLプロジェクトなどを使いたい場合はこちら。
    C++で開発される方は、個別コンポーネントで「デスクトップC++ x86 およびx64用Windows 10 SDK (10.0.15063.0)」や「Windows SDK (10.0.14393.0)」にもチェックを入れておきましょう。既知の問題を回避するためです。
    また、MFCが必要な方は個別のコンポーネントで「MFCとATLのサポート(x86とx64)」も忘れずに選択しましょう。

 

  • ユニバーサルWIndowsプラットフォーム開発
    C#、VB.NET、C++などでWindows 10 PC、Mobile、HoloLensなど、UWPアプリを作りたい方はこちら。

 

ほかにもWeb系などいろいろとありますが、私自身が詳しくないので割愛します。
もし、インストールしたけど特定のプロジェクトが見つからない、ソリューションしか作成できないといった時は、Visual Studio Installerを起動して、変更ボタンをクリックして、オプションを確認しましょう。

何も選んでいなかった場合

ソリューションしか作成できません。

image

.NETデスクトップ開発を選んだ場合

見慣れたWindowsフォームアプリケーション、コンソールアプリケーション、WPFアプリケーションが作成できます。

image

C++によるデスクトップ開発を選んだ場合

Win32コンソールアプリケーション、Win32プロジェクト。
見ての通り、MFCはワークロードを選ぶだけでは入らないので、必要な方はワークロードタブでC++によるデスクトップ開発を選んだ後に、個別コンポーネントでMFCのチェックを入れましょう。

image

ユニバーサルWIndowsプラットフォーム開発

空のアプリほか、ユニバーサルWindowsで必要なプロジェクトのみインストールされます。

image

 

※本稿はVisual Studio 2017 (15.2)の時点の情報です。Visual Studio 2017はインストーラーを含め、1ヶ月に1度程度のアップデートが提供されていくため、執筆時点と現在とで状況が異なる可能性があります。

—-

この記事のリンク用の短縮 URL は http://wp.me/p19AcI-8a です。

2017/03/12 / Azulean

VS2017は異なるSKUを共存させることができる

これまでの Visual Studio は Express 以外の Community, Professional, Enterprise を共存させることはできませんでした。

Visual Studio 2017 ではインストールの仕組みが変わったため、Community, Professional, Enterprise といったエディション(SKU)のインスタンスを共存させると言うこともできます。
開発環境のエディションごとの検証が必要な人は便利かもしれません。

なお、それに伴い、Visual Studio のインストール先が必要なケースでは vswhere というツールが便利です。すべてのインスタンスを列挙してくれます。

出力例

Visual Studio Locator, version 1.0.50
Copyright (C) Microsoft Corporation. All rights reserved.

instanceId: 1d4779be
installDate: 2017/03/11
installationName: VisualStudio/15.0.0-RTW+26228.4
installationPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
installationVersion: 15.0.26228.4
displayName: Visual Studio Community 2017
description: 学生、オープン ソース、および個々の開発者のための無料で完全な機能を備えた IDE
enginePath: C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service
channelId: VisualStudio.15.Release
channelPath: C:\Users\Owner\AppData\Local\Microsoft\VisualStudio\Packages\_Channels\4CB340F5\catalog.json
channelUri: https://aka.ms/vs/15/release/channel

instanceId: 29de2085
installDate: 2017/03/12
installationName: VisualStudio/15.0.0-RTW+26228.4
installationPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise
installationVersion: 15.0.26228.4
displayName: Visual Studio Enterprise 2017
description: 生産性向上と、さまざまな規模のチーム間の調整のための Microsoft DevOps ソリューション
enginePath: C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service
channelId: VisualStudio.15.Release
channelPath: C:\Users\Owner\AppData\Local\Microsoft\VisualStudio\Packages\_Channels\4CB340F5\catalog.json
channelUri: https://aka.ms/vs/15/release/channel

instanceId: 2df6de13
installDate: 2017/03/11
installationName: VisualStudio/15.0.0-RTW+26228.4
installationPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional
installationVersion: 15.0.26228.4
displayName: Visual Studio Professional 2017
description: 小規模なチーム向けのプロフェッショナルな開発者向けツールおよびサービス
enginePath: C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service
channelId: VisualStudio.15.Release
channelPath: C:\Users\Owner\AppData\Local\Microsoft\VisualStudio\Packages\_Channels\4CB340F5\catalog.json
channelUri: https://aka.ms/vs/15/release/channel

2016/11/03 / Azulean

Visual Studioで「Windowsフォームアプリケーション」テンプレートが見つからない?

Visual Studio 2017 の方はインストール時の選択が問題の可能性があります。こちらをご覧ください。


MSDN フォーラムにおいて短期間に 2 件の質問があったので書いてみます。

たとえば、Visual Studio 2015 Community を Windows 10 にインストールすると、スタートメニューの上の方にある、最近追加されたものに以下のように表示されます。

image

ついつい、Visual Studio 2015 という文字に惹かれて起動してしまいそうになりますが、これは Blend といって、WPF などの画面デザインに使うアプリケーションであって、Visual Studio ではありません。
Blend は Windows フォームアプリケーションに対応していないので、プロジェクトの新規作成で表示されず、画面も似ているので混乱してしまいます。

 

スタートメニューをスクロールして、V のカテゴリにある Visual Studio 2015 のアイコンで起動してください。

image

 

(備考)Visual C++ では「Windows フォーム アプリケーション」テンプレートは廃止されています

Visual C++ の「Windows フォーム アプリケーション」のプロジェクトテンプレートは 2012 から廃止されています。現在、新規開発は非推奨になっているのでご留意ください。

https://support.microsoft.com/ja-jp/kb/3001686

これを無視して過去のバージョンのテンプレートで作ってくる、あるいは公開・配布されている第三者のテンプレートを使えば新規に作ることはできますが、将来性の懸念があること、C++ と .NET の両方の知識を十分求めるハードルの高さ、サンプルの少なさ、できあがったものは C++/CLI という独自の言語であって C++ ではないことから、この道を選ばないことを推奨します。

—–
この記事のリンク用の短縮 URL は http://wp.me/p19AcI-7S です。

2016/09/16 / Azulean

Win10 1607(Anniversary Update)とD&D

Technet blogsにこんな記事が掲載されていた。

「資格情報ダイアログが表示されると、ドラッグが開始できなくなる問題について」
https://blogs.technet.microsoft.com/askcorejp/2016/09/14/cannot-drag-on-an-application-with-windows-10-anniversary-update/

 

この記事によると、Anniversary Update を当てた Windows 10、つまり Win10 Ver1607 において、資格情報ダイアログが表示されるようなことがあると、そのプロセスではドラッグが開始できなくなるそうだ。

手元で実験してみると、確かに、.NET の DoDragDrop メソッドを呼んでも何も起きなくなる
自前で MouseDown から MouseMove、MouseUp とドラッグ&ドロップを実装しているのであれば影響しないのかもしれないが、DoDragDrop メソッドを使っていればこの不具合に遭遇しうる。
そして、現状の回避策はプロセスの再起動しかない。

もっとも、資格情報が表示されるケースとなると、ユーザーが指定した任意のパスにアクセスするロジックを持つか、アプリが表示したコモンダイアログでユーザーがそういったパスを入力した時なので、発生現場は限られるのかもしれない。

(ファイラー機能を持つアプリは死亡率が上がりますが…)

2016/08/01 / Azulean

Skype for Business(SfB) Web Appで「オーディオデバイスエラー」となって音が聞こえない場合

Skype for BusinessのWeb Appの会議に招待されるなどしても、「オーディオデバイスエラー」となって音が聞こえないことがあります。

このときは、マイクなどの録音(入力)デバイスが1つ以上あるかを確認してみましょう。
ヘッドホン・スピーカーなどの再生デバイスだけしか存在しない場合は、音を聞くこともできないようです。(2016/08/01現在)
入力デバイスがあっても接続されていないことでエラーになっているかもしれないので、もし、何もつながっていない場合は何かマイクをつないでみて改善するか試してみましょう。