2017-10-20 146 views
1

我有一个带有一些文本框和按钮的简单网页。当我点击其中一个按钮时,我想让一些标签出现在下方并显示一些信息。C#ASP.NET - 使用另一个类的方法创建标签

只要我具有_Default类中的所有方法,就可以很好地工作。但是,我真正需要的是将所有这些东西放入包装类中。我用我所需要的所有其他方法创建了包装类,除了标签之外,所有的工作都很好。他们不显示。它不是代码本身的问题,因为相同的代码在_Default类中工作。它不是类本身,因为该类中的其他方法在_Default类中正常工作。所以它似乎是我无法弄清楚的其他类中标签的具体内容。跨类的控件是否存在继承问题?

我只是其中创建标签的包装类中的一个简单的方法:

 public void createLabels(string labelName) 
    { 
     Label label_Name = new Label(); 
     label_Name.ID = "label_Name"; 
     label_Name.Text = labelName; 
     Controls.Add(label_Name); 
     Label get_Name = new Label(); 
     get_Name.ID = "get_Name"; 
     get_Name.Text = "Not found"; 
     Controls.Add(get_Name); 
    } 

然后_Default类中,我调用这个方法类似,

MyWrapperClass abc = new MyWrapperClass(); 
abc.createLabels("asdf"); 

我猜问题在于“Controls.Add”,但我无法找到正确的方法。

+0

最好的做法是通过的参考标签组件作为参数。 –

+0

你如何声明和初始化你的包装类的'Controls'属性?显而易见的方法是将页面的'Controls'集合传递给包装的构造函数,但是这里没有显示这些代码,所以很难确定。 –

回答

1

通父控件作为参数传递给createLabels

public class MyWrapperClass 
{ 
    ... 
    public void createLabels(Control parent, string labelName) 
    { 
    Label label_Name = new Label(); 
    label_Name.ID = "label_Name"; 
    label_Name.Text = labelName; 
    parent.Controls.Add(label_Name); 

    Label get_Name = new Label(); 
    get_Name.ID = "get_Name"; 
    get_Name.Text = "Not found"; 
    parent.Controls.Add(get_Name); 
    } 
} 

MyWrapperClass abc = new MyWrapperClass(); 
abc.createLabels(this, "asdf"); 
+0

这正是我所需要的。 – Sherlock

+0

@Sherlock在答案的左侧有一个复选标记,可以点击以强调评论中的消息:) – Igor

+0

我无法点击它,因为我没有足够的积分或其他内容。 – Sherlock

1

您正试图添加到包装类中的控件。但是Page对象在你的包装类中不可用。

您可以从包装类中返回一个Label并将其添加到主类中的控件中。

public Label createLabels(string labelName) 
{ 
    Label label_Name = new Label(); 
    label_Name.ID = "label_Name"; 
    label_Name.Text = labelName; 
    return label_Name; 
} 

然后_Default类里面,你调用这个方法类似,

MyWrapperClass abc = new MyWrapperClass(); 
Page.Controls.Add(abc.createLabels("asdf")); 
+0

这工作!谢谢! – Sherlock

相关问题