10

次の問題を解決する最善の方法は何ですか?

foreach (Control control in this.Controls)
{
    if (control is ComboBox || control is TextBox)
    {
        ComboBox controlCombobox = control as ComboBox;
        TextBox controlTextbox = control as TextBox;

        AutoCompleteMode value = AutoCompleteMode.None;

        if (controlCombobox != null)
        {
            value = controlCombobox.AutoCompleteMode;
        }
        else if (controlTextbox != null)
        {
            value = controlTextbox.AutoCompleteMode;
        }

        // ...
    }
}

AutoCompleteMode プロパティを取得するには十分に複雑であることがわかります。ComboBox または TextBox のいずれかがあることが保証されていると想定できます。

私の最初のアイデアは、 Tに複数の型を持つジェネリックを使用することでしたが、これは .NET では不可能のようです:

public string GetAutoCompleteModeProperty<T>(T control) where T: ComboBox, TextBox // this does not work, of course

残念ながら、両方のコントロールには共通の基本クラスがありません。

:これは、最小化された例で使用されるより一般的な質問であることを意図しています。私の場合、他の AutoComplete* プロパティにもアクセス/操作したいと考えています (これも両方のコントロールに共通しています)。

アイデアをありがとう!

4

3 に答える 3

5
dynamic currentControl =  control;
string text = currentControl.WhatEver;

ただし、currentControl に WhatEver プロパティがない場合、例外 (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException) がスローされます。

于 2013-04-30T07:53:20.917 に答える