この場合、Reflectionを使用することができれば、プライベートプロパティを調べてその値を抽出できます。ここでは(あなたのリンクからMicrosoft.Data.ConnectionUI.Sample
プロジェクトに基づく)の例である:
static void Main(string[] args)
{
DataConnectionDialog dialog = new DataConnectionDialog();
DataConnectionConfiguration connectionConfig = new DataConnectionConfiguration(null);
connectionConfig.LoadConfiguration(dialog);
if (DataConnectionDialog.Show(dialog) == DialogResult.OK)
{
bool isSavePasswordChecked = IsSavePasswordChecked(dialog);
}
}
private static bool IsSavePasswordChecked(DataConnectionDialog dialog)
{
var control = GetPropertyValue("ConnectionUIControl", dialog, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty);
if (control == null)
{
return false;
}
var properties = GetPropertyValue("Properties", control, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.DeclaredOnly);
if (properties == null)
{
return false;
}
var savePassword = GetPropertyValue("SavePassword", properties, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
if (savePassword != null && savePassword is bool)
{
return (bool)savePassword;
}
return false;
}
private static object GetPropertyValue(string propertyName, object target, BindingFlags bindingFlags)
{
var propertyInfo = target.GetType().GetProperty(propertyName, bindingFlags);
if (propertyInfo == null)
{
return null;
}
return propertyInfo.GetValue(target, null);
}
しかし、このアプローチはいくつかのバージョン管理の問題を紹介することに注意してください:あなたはいくつかの点でのdataconnectionダイアログライブラリをアップグレードするつもりなら将来、これらのプロパティは新しいバージョンでは利用できない可能性があります。
反射を使用してこのプロパティを取得できます。少し不安ですが、そのトリックを行います:)もしあなたが望めば、私はそのためのコードスニペットを投稿することができます。 –
私はその男が大好きです。ありがとうございました。 – MoonKnight