0

C# でこのメソッドを実現する方法:

public static void SetParam(string element, string property, dynamic value){
 // Do something
}

// Usage:
setParam("textBox1","Text","Hello");

JavaScript では次のようになります。

function SetParam(element, property, value) {
 document.getElementById(element)[property]=value;
}

// Usage:
SetParam("textBox","value","Hello");
4

3 に答える 3

1

私があなたの質問を正しく理解していれば、これはリフレクションの助けを借りて行うことができます...

using System.Reflection;cs ファイルの先頭に a: を追加することから始めます。

WPF を使用しているか、Winforms を使用しているかがわからないため、ここに 2 つの例を示します...
WPF:

このバージョンの SetParam を使用できます。

private void SetParam(string name, string property, dynamic value)
{
      // Find the object based on it's name
      object target = this.FindName(name);

      if (target != null)
      {
          // Find the correct property
          Type type = target.GetType();
          PropertyInfo prop = type.GetProperty(property);

          // Change the value of the property
          prop.SetValue(target, value);
      }
}

使用法:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
   SetParam("textbox", "Text", "Hello");   

Wheretextboxは次のように宣言されています。

<TextBox x:Name="textbox" />

Winforms の場合は、SetParam を次のように変更します。

private void SetParam(string name, string property, dynamic value)
{
      // Find the object based on it's name
      object target = this.Controls.Cast<Control>().FirstOrDefault(c => c.Name == name);

      if (target != null)
      {
          // Find the correct property
          Type type = target.GetType();
          PropertyInfo prop = type.GetProperty(property);

          // Change the value of the property
          prop.SetValue(target, value);
      }
}
于 2013-03-12T23:10:40.693 に答える
1

おそらく、次のことがうまくいくでしょう。

public void SetParam(string element, string property, dynamic value)
{
    FieldInfo field = typeof(Form1).GetField(element, BindingFlags.NonPublic | BindingFlags.Instance);
    object control = field.GetValue(this);
    control.GetType().GetProperty(property).SetValue(control, value, null);
}

Form1変更するコントロールを含むフォーム クラスに置き換えます。

編集:Blachshmaの答えを読んだ後、私はあなたが入れなければならないことに気づきました

using System.Reflection;

ファイルの上部にあります。

また、Windows フォーム アプリケーション用であると想定しました。

最後に、コントロールへの参照を取得するより良い方法は、Form.ControlsGreg が提案したようなプロパティを使用することです。

于 2013-03-12T23:11:50.763 に答える
0

「要素」変数がコントロールの I であると仮定すると、リフレクションを使用します。

    

PropertyInfo propertyInfo = form1.Controls.Where(c => c.id == element).FirstOrDefault().GetType().GetProperty(property,
                            BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
    if (propertyInfo != null)
    {
        if (propertyInfo.PropertyType.Equals(value.GetType()))
            propertyInfo.SetValue(control, value, null);
        else
            throw new Exception("Property DataType mismatch, expecting a " +
                                propertyInfo.PropertyType.ToString() + " and got a " +
                                value.GetType().ToString());
    }
}
于 2013-03-12T23:16:46.553 に答える