個人用設定の実装方法
個人用設定を実装する場合、アプリケーションで少なくとも次の 2 つのタスクを実行する必要があります。
- カスタム設定をロードし、表示します。
- 自分の設定を作成または変更する方法をユーザーに提供します。
カスタム設定のロードと表示
サンプル アプリケーションでは、2 つのタイプの設定が構成ファイルに格納されています。最初のタイプは "既定のユーザー" です。defaultUserName という構成設定には、自動的にサインインするための設定を最後に行ったユーザーのユーザー名が格納されています。
アプリケーションの起動時に、次の行のコードで構成ファイルから defaultUserName の値がロードされます。
defaultUserName = ConfigurationManager.AppSettings["defaultUserName"];
次に、構成ファイルに defaultUserName として保存されている値があるかどうかが確認されます。値がある場合は、サイレント認証を実行し、ユーザーを自動的にサインインさせます。次のコードは、サンプル アプリケーションからの抜粋です。
//Check the config file to see if a default user is defined.
defaultUserName = ConfigurationManager.AppSettings["defaultUserName"];
if (!String.IsNullOrEmpty(defaultUserName))
{
TrySilentSignIn();
}
サイレント認証の詳細については、「自動サインインの実装」を参照してください。
続いて、既定のユーザーがサインインした後に、次の行のコードで表示が更新されます。
UpdateDisplay();
UpdateDisplay は、サンプル アプリケーションで何かの原因で UI の表示が変更されるときに、常に呼び出されます。UI の表示に影響を与える可能性のある変更には次のようなものがあります。
- ユーザーのサインイン (自動または UI を通じてのいずれか)
- ユーザーのサインアウト
- ユーザーによるそのユーザー自身のアプリケーション設定の変更
次に説明するのは、サンプル アプリケーションで使用される 2 番目のタイプの構成設定です。2 番目のタイプの設定は、エンド ユーザーが選択した背景色です (既に選択されている場合に適用されます)。この値は構成ファイルからロードされ、UpdateDisplay メソッドでアプリケーションの表示に反映されます。次のコードは、サンプル アプリケーションからの抜粋です。
//Method which updates the display of the application to reflect its current state.
private void UpdateDisplay()
{
//Check to see if the user is authenticated and update the display appropriately.
if (oID.IsAuthenticated)
{
toolStripStatusLabel1.Text = "Signed In";
buttonSignInOrOut.Text = "Sign Out";
buttonOptions.Enabled = true;
buttonBlog.Enabled = true;
buttonDetails.Enabled = true;
currentBgColor = ConfigurationManager.AppSettings[oID.cId + "_bgColor"];
}
//If user is not authenticated, update the display appropriately.
else
{
toolStripStatusLabel1.Text = "Signed Out";
buttonSignInOrOut.Text = "Sign In";
buttonOptions.Enabled = false;
buttonBlog.Enabled = false;
buttonDetails.Enabled = false;
currentBgColor = "";
}
if (!String.IsNullOrEmpty(currentBgColor))
{
this.BackColor = Color.FromArgb(Int32.Parse(currentBgColor));
}
else
{
this.BackColor = Form.DefaultBackColor;
}
}
UpdateDisplay は、最初に、IsAuthenticated プロパティにアクセスして、ユーザーが認証されているかどうか検査します。IsAuthenticated が true を返した場合、それを反映してさまざまな UI の表示が更新されます。たとえば、[Sign In] ボタンは次の行のコードで [Sign Out] という表示に変更されます。
buttonSignInOrOut.Text = "Sign Out";
さらに、ユーザーが以前にカスタム背景色を指定していた場合、次の行のコードで、構成ファイルからカスタム設定がロードされます。
currentBgColor = ConfigurationManager.AppSettings[oID.cId + "_bgColor"];
この行のコードで、現在のユーザーの色設定を表す値が構成ファイルからロードされます。これは、現在ユーザーの一意のクライアント識別子 (oID.cId) と "_bgColor" を結合して動的に作成された名前を持つ設定を探して実行されます。このようにして、アプリケーションのすべてのユーザーが、各自の Windows Live ID アカウントと一意に関連付けられたカスタム色設定を保存することができます。
カスタム色設定が構成ファイルからロードされると、次の行のコードでサンプル アプリケーションの背景色が変更されます。
this.BackColor = Color.FromArgb(Int32.Parse(currentBgColor));
Windows Forms アプリケーションでの UI カスタマイズの詳細については、MSDN Web サイトの Windows Forms のスマート クライアント アプリケーションに関するページを参照してください。
ユーザーによるカスタム設定の変更
サンプル アプリケーションでは、ユーザーによるカスタム設定の作成および変更はダイアログ ウィンドウを使用して実装されています。ユーザーがサインインするとすぐに、次の行のコードで [Options] ボタンが使用可能になります。
buttonOptions.Enabled = true;
ユーザーが [Options] をクリックすると、次のコードが呼び出されます。
private void buttonOptions_Click(object sender, EventArgs e)
{
OptionsWindow optsWindow = new OptionsWindow();
if (optsWindow.ShowDialog() == DialogResult.OK)
{
UpdateConfig();
}
UpdateDisplay();
}
このコードは、ユーザーが [Options] ボタンをクリックすると実行されます。最初に [Personal Options] ダイアログ ボックスが開きます (下図)。この処理のため、サンプル アプリケーションに組み込まれている OptionsWindow クラスの新規インスタンスが作成されます。
[Personal Options] ダイアログ ボックス
OptionsWindow には、ユーザーの自動サインインを設定する操作やカスタム背景色を指定する操作と連携するコントロールが含まれています。次のコードは、サンプル アプリケーションからの抜粋です。
public OptionsWindow()
{
InitializeComponent();
if (MainWindow.currentUserName.Equals(MainWindow.defaultUserName))
{
checkBoxDefaultUser.Checked = true;
}
else
{
checkBoxDefaultUser.Checked = false;
}
}
private void buttonColor_Click(object sender, EventArgs e)
{
ColorDialog colorDialog1 = new ColorDialog();
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
MainWindow.tempBgColor = colorDialog1.Color.ToArgb().ToString();
}
else
{
MainWindow.tempBgColor = "";
}
}
private void checkBoxDefaultUser_CheckedChanged(object sender, EventArgs e)
{
if (checkBoxDefaultUser.Checked)
{
MainWindow.tempDefaultUserName = MainWindow.currentUserName;
}
else
{
MainWindow.tempDefaultUserName = "";
}
}
OptionsWindow クラスの定義には、[Personal Options] ダイアログ ボックスに存在するコントロールに対するユーザー操作に対応するためのコードがすべて含まれています。ユーザーがカスタム設定に変更を加えると、MainWindow クラス内で状態を表すさまざまな文字列の値が更新されます。
ユーザーが [OK] をクリックすると、UpdateConfig が呼び出されて、加えられた変更が構成ファイルに保存されます。次のコードは、サンプル アプリケーションからの抜粋です。
//Update the config file.
private void UpdateConfig()
{
if (!String.IsNullOrEmpty(tempBgColor))
{
config.AppSettings.Settings.Remove(oID.cId + "_bgColor");
config.AppSettings.Settings.Add(oID.cId + "_bgColor", tempBgColor);
}
else
{
config.AppSettings.Settings.Remove(oID.cId + "_bgColor");
}
if (tempDefaultUserName != "")
{
defaultUserName = tempDefaultUserName;
config.AppSettings.Settings.Remove("defaultUserName");
config.AppSettings.Settings.Add("defaultUserName", tempDefaultUserName);
}
else if (oID.UserName.Equals(defaultUserName))
{
config.AppSettings.Settings.Remove("defaultUserName");
defaultUserName = "";
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
構成ファイルに保存されている設定を変更するには、まず Remove メソッドを使用してその設定を削除し、その後で Add メソッドを使用して新しい値を追加する必要があることに注意してください。
ユーザーのカスタム背景色を示す設定は、次の行のコードで作成されます。
config.AppSettings.Settings.Add(oID.cId + "_bgColor", tempBgColor);
このコードは、現在ユーザーの一意のクライアント識別子 (oID.cId) と "_bgColor" を結合して動的に作成された名前を持つ構成設定を作成します。このようにして、アプリケーションのすべてのユーザーが、各自の Windows Live ID アカウントと一意に関連付けられたカスタム色設定を保存することができます。
[Sign Me In Automatically] チェック ボックスがオフになっている場合、まず、次の行のコードで現在のユーザーが既定のユーザーかどうかの確認が行われます。
else if (oID.UserName.Equals(defaultUserName))
現在のユーザーが既定のユーザーで、かつ [Sign Me In Automatically] がオフになっている場合、これは既定のユーザーが今後は自動的にサインインするつもりがないことを意味します。次の行のコードで構成ファイルおよび既定のユーザーを表すプログラム変数が更新されて、この状況が反映されます。
config.AppSettings.Settings.Remove("defaultUserName");
defaultUserName = "";
Windows Forms アプリケーションでの UI カスタマイズの詳細については、Windows Forms のスマート クライアント アプリケーションに関するページを参照してください。
構成設定の詳細については、System.Configuration 名前空間を参照してください。
関連項目
タスク
個人用設定のセットアップ方法
Windows Live ID サンプル アプリケーションの実行