1

我正在使用下一个代码将参数传递给泛型方法。

 private void SetValue<T>(T control, String title)
 {
      T.BackgroundImage = title;
 }

示例用法

SetValue<Button>(myButton,"Resource.ImgHouse_32.etc")

这不会在 T.BackgroundImage 行编译,它是某些控件、按钮、复选框等的属性。

我如何设置通用方法可以做到 T.BackGroundImage ?

抱歉,任何错误都是动态代码。

4

2 回答 2

3

你需要做两件事来完成这项工作:

  1. 约束你的泛型(或删除它们),并且
  2. 从字符串加载资源

这看起来像:

private void SetBackgroundImage<T>(T control, string title) where T : Control
{
    control.BackgroundImage = 
                new Bitmap(
                    typeof(this).Assembly.GetManifestResourceStream(title));
}

请注意,在这种情况下,您根本不需要泛型。由于Control具有BackgroundImage属性,您可以将其写为:

private void SetBackgroundImage(Control control, string title)
{
    control.BackgroundImage = 
                new Bitmap(
                    typeof(this).Assembly.GetManifestResourceStream(title));
}

然后您可以通过以下方式调用它:

SetBackgroundImage(myButton, "MyProject.Resources.ImgHouse_32.png"); // Use appropriate path
于 2013-11-13T01:17:39.250 回答
1
 private void SetValue<T>(T control, String title) where T:Control

你必须告诉编译器 T 继承了 Control。我相信这称为约束,您可以将此约束设置为类和接口。

http://msdn.microsoft.com/en-us/library/vstudio/d5x73970.aspx

于 2013-11-13T01:14:16.583 回答