gpt4 book ai didi

c# - 将多个控件添加到 webform 中的面板

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:56 24 4
gpt4 key购买 nike

我希望能够将多个标签控件添加到面板并在 onlick 事件中显示它们。我拥有的代码第一次执行了我想要的操作,然后在第二个 onlick 事件中将标签简单地替换为新标签,依此类推。

这是我目前所拥有的:

 private void createTaskLabel(Guid GoalID, string Goal)
{
Label taskLabel = new Label();
taskLabel.ID = GoalID.ToString();
taskLabel.Text = Goal.ToString();
TaskPanel.Controls.Add(taskLabel);
}

因此,例如,这将创建一个具有唯一 ID(在别处处理)的新标签,并将其放置在面板中并显示它。当 onlick 再次触发时,相同的标签将被替换,而不是在其下方出现新的标签。

最佳答案

动态创建的控件在回发后不会保留。您需要跟踪您生成了多少控件,并每次都重新生成所有这些控件,以便按您想要的方式工作。基本实现:

List<string> LabeIDList = new List<string>();

override SaveViewState(..)
{
if (LabelIDList.Count>0) {
ViewState["LabelDIList"]=LabelIDList;
}
base.SaveViewState(..)
}
override LoadViewState()
{
base.LoadViewState();
if (ViewState["LabelIDList"]!=null) {
LabelIDList = (List<string>)ViewState["LabelIDList"];
}
}
override void OnLoad(..)
{
foreach (string id in LabelIDList)
{
// Make a function essentially like your code in createTaskLabel,
// you can use it there too
RecreateControl(id);
}
}

private void createTaskLabel(Guid GoalID, string Goal)
{
...
// save the ID you just created
LabelIDList.Add(taskLabel.ID);
}

我刚刚意识到这些是您正在创建的标签 - 所以实际上您可能应该跟踪 Text而不是身份证。如果由于某种原因实际 ID 很重要,那么请同时跟踪它们,使用 List<Tuple<string,string>>为了那个原因。不过,更典型的情况是创建输入控件,在这种情况下,只要您在 OnLoad 时或之前重新创建用户输入的数据(假设启用了 ViewState),ASP.NET 就会保留用户输入的数据。

关于c# - 将多个控件添加到 webform 中的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5033503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com