2

テキストボックスと「参照」ボタンで構成されるユーザーコントロールを作成しようとしています。これにより、ファイルダイアログが開き、選択内容でテキストボックスが更新されます(HTMLファイルアップロードボックスなど)。選択したファイル プロパティをテキスト ボックスにマップする一方で、ファイル ダイアログの他のほとんどすべてのプロパティを自分のコントロール (フィルターなど) から公開する必要があります。

私の2つの質問:

  1. 内部コントロールの 1 つのプロパティに直接マップされているコントロールのプロパティの場合、get/setペアを手動で記述して単一行を追加することなく、これを簡単に行うためのショートカット (言語または VS IDE のいずれか) はありますか?それぞれが対応するプロパティを返す/設定しますか?
  2. 複数のプロパティに対して上記を行う方法 (言語または IDE ショートカット) はありますか? 基本的に、コントロールにファイル ダイアログのすべてのプロパティを持たせたいと考えています。
4

2 に答える 2

3

これは T4 の仕事のようですね。

T4 とリフレクションを使用して、これらすべてのプロパティを含む部分クラスを作成できます。このクラスが 1 つだけの場合、手動で行うよりも作業が増える可能性があります。どのくらいの頻度で使用するかを決める必要があると思います。

編集:

T4 の意味: テキスト テンプレート変換ツールキット

これは Visual Studio に組み込まれており、コードを生成するテンプレートを作成できます。
あらゆる種類の繰り返しコードまたは定型コードを記述する必要がある場合はいつでも役立ちます。

私はあなたのために始めました。ソリューションに MyUserControl.tt という名前の新しいファイルを作成し、以下のコードをコピーします。
保存するとすぐに、MyUserControl.cs という名前の新しいファイルが表示され、すべてのプロパティが一覧表示されます。

これにより部分クラスが作成されるため、既存のユーザー コントロールと一致するようにクラス名と名前空間を微調整する必要があります。私はあなたのテキストボックスの名前がターゲットであると仮定しましたが、明らかにそれも微調整できます。

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Web" #>
<#@ import namespace="System.Reflection" #> 

public partial class MyUserControl
{
<#
PropertyInfo[] properties = typeof(System.Web.UI.WebControls.TextBox).GetProperties(
    BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo property in properties)
{
    WriteLine(string.Format("    public {0} {1}", property.PropertyType.FullName, property.Name));
    WriteLine("    {");

    if(property.GetGetMethod() != null)
    {
        WriteLine("        get { return Target." + property.Name + "; } ");
    }

    if(property.GetSetMethod() != null)
    {
        WriteLine("        set { Target." + property.Name + " = value; } ");
    }

    WriteLine("    }");
    WriteLine("");
}

#>
}
于 2012-09-20T14:07:44.490 に答える
1

これは、ReSharperを使用して行うことができます。
次のクラスを想定しています。

public class YourUserControl
{
    private OpenFileDialog _openFileDialog;
    private TextBox _textBox;
}

クラス内にカーソルを置き、Alt + Insを押して、[メンバーの委任]を選択できます。これにより、両方のフィールドのすべてのパブリックメンバーのリストが表示されます。あなたはあなたが必要とするものを選ぶことができます、そしてあなたはあなたから離れています:

ここに画像の説明を入力してください

于 2012-09-20T11:30:31.403 に答える