C# winforms上的反射问题
我有一个winforms应用程序 我有一个填充方法,在tabcontrol的每个页面上创建一组控件。Populate方法有两个参数——tab页和一个包含一组标签字符串的列表。每个选项卡页都有一个单独的列表,列表的名称与选项卡页的名称相同。我希望遍历这些页面,并通过名称将适当的列表传递给Populate方法,即通过作为其名称的字符串传递列表。据我所知,我需要反思一下 代码:C# winforms上的反射问题,c#,winforms,reflection,C#,Winforms,Reflection,我有一个winforms应用程序 我有一个填充方法,在tabcontrol的每个页面上创建一组控件。Populate方法有两个参数——tab页和一个包含一组标签字符串的列表。每个选项卡页都有一个单独的列表,列表的名称与选项卡页的名称相同。我希望遍历这些页面,并通过名称将适当的列表传递给Populate方法,即通过作为其名称的字符串传递列表。据我所知,我需要反思一下 代码: 名称空间测试 { 公共部分类Form1:Form { List Hongdoe=新列表(新字符串[]{“Chin”、“Foa
名称空间测试
{
公共部分类Form1:Form
{
List Hongdoe=新列表(新字符串[]{“Chin”、“Foa”、“Hu”、“Dan”});
List Donfu=新列表(新字符串[]{“Faa”、“Su”、“Pi”、“Mou”});
//TabPage1.Name=Hongdoe
//TabPage2.Name=Donfu
foreach(Tab_控件中的TabPage tp.TabPages)
{
//我想告诉程序“查找名为'tp.Name'的变量/列表”
var ListName=typeof(Form1).GetField(tp.Name)
填充(tp,列表名);
}
}
无效填充(选项卡页tp,列表)
{
for(int i=0;i
但到目前为止,它返回null。我还尝试使用“GetProperty”、“GetValue”,但没有成功
(在我编辑这个问题之前,我使用了一个变量来简单地演示我的问题)您不需要使用反射。您可以使用
字典
,使用列表名称(选项卡页面名称)作为键,使用字符串列表作为值。然后您可以使用字典中的键获取列表
Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
private void ProductList_Load(object sender, EventArgs e)
{
//Initialize dictionary with keys and values
dictionary["page1"] = new List<string> { "string 1", "string 2" };
dictionary["page2"] = new List<string> { "string 3", "string 4" };
//...
}
注
- 您不需要将列表传递给方法,只需将
传递给方法即可,您可以使用TabPage
dictionary[TabPage.Name]
- 您可以在选项卡页面中使用
或TableLayoutPanel
添加标签。这样,标签将自动排列FlowLayoutPanel
- 仅用于学习目的,如果您想使用反射:
var list = (List<string>)this.GetType().GetField("Hongdoe", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this);
var list=(list)this.GetType().GetField(“Hongdoe”, System.Reflection.BindingFlags.NonPublic| System.Reflection.BindingFlags.Instance.GetValue(this);
字典
并使用列表名称(选项卡页面名称)作为键,使用字符串列表作为值。然后您可以使用字典中的键获取列表
Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
private void ProductList_Load(object sender, EventArgs e)
{
//Initialize dictionary with keys and values
dictionary["page1"] = new List<string> { "string 1", "string 2" };
dictionary["page2"] = new List<string> { "string 3", "string 4" };
//...
}
注
- 您不需要将列表传递给方法,只需将
传递给方法即可,您可以使用TabPage
dictionary[TabPage.Name]
- 您可以在选项卡页面中使用
或TableLayoutPanel
添加标签。这样,标签将自动排列FlowLayoutPanel
- 仅用于学习目的,如果您想使用反射:
var list = (List<string>)this.GetType().GetField("Hongdoe", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this);
var list=(list)this.GetType().GetField(“Hongdoe”, System.Reflection.BindingFlags.NonPublic| System.Reflection.BindingFlags.Instance.GetValue(this);