我编写了使用占位符动态创建控件的代码。 该程序生成用于创建调查的简单表格。程序的结构分为两部分。第一部分动态创建许多包含PlaceHolders的控件。为了更好地理解,我添加了一些代码片段。
首先,我为ex创建了一些私人列表。
private List<string> LabelsList
{
get
{
if (ViewState["labels"] == null)
{
ViewState["labels"] = new List<string>();
}
return (List<string>)ViewState["labels"];
}
}
在下一步中,我添加了int变量来检查例如列表上有多少个ID。
private int LastIDLabels
{
get
{
return LabelsList.Count;
}
}
在第三步中,我编写了通用代码来加载ViewState,并为Buttons动作添加和删除了控件。
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
for (int i = 0; i < ControlsList.Count; i++)
{
Label InstrukcjaList = new Label();
InstrukcjaList.ID = LabelsList[i];
InstrukcjaList.Width = 200;
InstrukcjaList.Height = 32;
int b = i + 2;
InstrukcjaList.Text = "Wprowadź treść pytania " + b;
InstrukcjaList.CssClass = "labelTwo";
InstrukcjaList.Style.Value = "color: white;";
TextBox PytanieList = new TextBox();
PytanieList.ID = ControlsList[i];
PytanieList.Width = 350;
PytanieList.Height = 28;
PytanieList.Font.Size = 10;
PytanieList.Style.Value = "margin-right: 5px;";
Button DodajOdpList = new Button();
DodajOdpList.ID = ListaDodaj[i];
DodajOdpList.Width = 20;
DodajOdpList.Height = 20;
DodajOdpList.Font.Size = 7;
DodajOdpList.Text = "+";
DodajOdpList.ToolTip = "Dodaj odpowiedź do pytania";
DodajOdpList.Style.Value = "background-color: green; color: white;";
//DodajOdpList.Attributes.Add("OnClick", "DodajOdp_Click");
Button UsunOdpList = new Button();
UsunOdpList.ID = ListaUsun[i];
UsunOdpList.Width = 20;
UsunOdpList.Height = 20;
UsunOdpList.Font.Size = 7;
UsunOdpList.Text = "-";
UsunOdpList.ToolTip = "Usuń odpowiedź";
UsunOdpList.Style.Value = "background-color: red; color: white;";
//UsunOdpList.Attributes.Add("OnClick", "UsunOdp_Click");
PlaceHolder PHListOdp = new PlaceHolder();
PHListOdp.ID = ListaPHOdp[i];
PlaceHolder1.Controls.Add(InstrukcjaList);
PlaceHolder1.Controls.Add(PytanieList);
PlaceHolder1.Controls.Add(DodajOdpList);
PlaceHolder1.Controls.Add(UsunOdpList);
PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
PlaceHolder1.Controls.Add(PHListOdp);
PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
Label OdpowiedzList = new Label();
OdpowiedzList.ID = ListaTrescOdp[i];
OdpowiedzList.Width = 200;
OdpowiedzList.Height = 32;
OdpowiedzList.Text = "Wprowadź odpowiedź 1";
OdpowiedzList.CssClass = "labelOne";
OdpowiedzList.Style.Value = "margin-left: 50px;";
TextBox WartoscOdpLista = new TextBox();
WartoscOdpLista.ID = ListaWartoscOdp[i];
WartoscOdpLista.Width = 350;
WartoscOdpLista.Height = 28;
WartoscOdpLista.Font.Size = 10;
WartoscOdpLista.Style.Value = "margin-right: 5px;";
CheckBox CheckBoxLista = new CheckBox();
CheckBoxLista.ID = ListaCheckOdp[i];
CheckBoxLista.ToolTip = "Zaznacz jeżeli prawidłowa odpowiedź";
/*PlaceHolder PHNewID = new PlaceHolder();
PHNewID.ID = "PH" + i;
PHNewID.Controls.Add(OdpowiedzList);*/
PHListOdp.Controls.Add(OdpowiedzList);
PHListOdp.Controls.Add(WartoscOdpLista);
PHListOdp.Controls.Add(CheckBoxLista);
}
}
protected void Button3_Click(object sender, EventArgs e)
{
Label InstrukcjaList = new Label();
InstrukcjaList.ID = "Instrukcja" + NextID.ToString();
InstrukcjaList.Width = 200;
InstrukcjaList.Height = 32;
int c = NextID + 1;
InstrukcjaList.Text = "Wprowadź treść pytania " + c.ToString();
InstrukcjaList.CssClass = "labelTwo";
InstrukcjaList.Style.Value = "color: white;";
LabelsList.Add(InstrukcjaList.ID);
TextBox PytanieList = new TextBox();
PytanieList.ID = "Pytanie" + NextID.ToString();
PytanieList.Width = 350;
PytanieList.Height = 28;
PytanieList.Font.Size = 10;
PytanieList.Style.Value = "margin-right: 5px;";
Button DodajOdpList = new Button();
DodajOdpList.ID = "DodajOdp" + NextID.ToString();
DodajOdpList.Width = 20;
DodajOdpList.Height = 20;
DodajOdpList.Font.Size = 7;
DodajOdpList.Text = "+";
DodajOdpList.ToolTip = "Dodaj odpowiedź do pytania";
DodajOdpList.Style.Value = "background-color: green; color: white;";
DodajOdpList.Click += new EventHandler(DodajOdp_Click);
ListaDodaj.Add(DodajOdpList.ID);
Button UsunOdpList = new Button();
UsunOdpList.ID = "UsunOdp" + NextID.ToString();
UsunOdpList.Width = 20;
UsunOdpList.Height = 20;
UsunOdpList.Font.Size = 7;
UsunOdpList.Text = "-";
UsunOdpList.ToolTip = "Usuń odpowiedź";
UsunOdpList.Style.Value = "background-color: red; color: white;";
UsunOdpList.Click += new EventHandler(UsunOdp_Click);
ListaUsun.Add(UsunOdpList.ID);
PlaceHolder PHListOdp = new PlaceHolder();
PHListOdp.ID = "PH" + NextID.ToString();
ListaPHOdp.Add(PHListOdp.ID);
PlaceHolder1.Controls.Add(InstrukcjaList);
PlaceHolder1.Controls.Add(PytanieList);
PlaceHolder1.Controls.Add(DodajOdpList);
PlaceHolder1.Controls.Add(UsunOdpList);
PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
PlaceHolder1.Controls.Add(PHListOdp);
PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
ControlsList.Add(PytanieList.ID);
Label OdpowiedzList = new Label();
OdpowiedzList.ID = "PH" + LastIDPH.ToString() + "L0";
OdpowiedzList.Width = 200;
OdpowiedzList.Height = 32;
OdpowiedzList.Text = "Wprowadź odpowiedź 1";
OdpowiedzList.CssClass = "labelOne";
OdpowiedzList.Style.Value = "margin-left: 50px;";
ListaTrescOdp.Add(OdpowiedzList.ID);
TextBox WartoscOdpLista = new TextBox();
WartoscOdpLista.ID = "PH" + LastIDPH.ToString() + "TB0";
WartoscOdpLista.Width = 350;
WartoscOdpLista.Height = 28;
WartoscOdpLista.Font.Size = 10;
WartoscOdpLista.Style.Value = "margin-right: 5px;";
ListaWartoscOdp.Add(WartoscOdpLista.ID);
CheckBox CheckBoxLista = new CheckBox();
CheckBoxLista.ID = "PH" + LastIDPH.ToString() + "CB0";
CheckBoxLista.ToolTip = "Zaznacz jeżeli prawidłowa odpowiedź";
ListaCheckOdp.Add(CheckBoxLista.ID);
PHListOdp.Controls.Add(OdpowiedzList);
PHListOdp.Controls.Add(WartoscOdpLista);
PHListOdp.Controls.Add(CheckBoxLista);
}
protected void Button4_Click(object sender, EventArgs e)
{
ListaCheckOdp.Remove("PH" + LastIDPH.ToString() + "CB0");
ListaWartoscOdp.Remove("PH" + LastIDPH.ToString() + "TB0");
ListaTrescOdp.Remove("PH" + LastIDPH.ToString() + "L0");
PlaceHolder1.Controls.Remove(new LiteralControl("<br/>"));
ListaPHOdp.Remove("PH" + LastIDPH.ToString());
PlaceHolder1.Controls.Remove(new LiteralControl("<br/>"));
ListaDodaj.Remove("DodajOdp" + LastIDDodajOdpButton.ToString());
ListaUsun.Remove("UsunOdp" + LastIDUsunOdpButton.ToString());
ControlsList.Remove("Pytanie" + LastID.ToString());
LabelsList.Remove("Instrukcja" + LastIDLabels.ToString());
}
我知道代码不太好,但是我是一名新手C#程序员。此代码完美地工作。不幸的是,我对代码的第二部分有很多疑问。
当我从Button3_Click诱导操作时,我会得到带有
的表单
标签,文本框,两个按钮,PlaceHolder,标签,文本框和复选框。
这些中最重要的控件是PlaceHolder,AddAnswer和DeleteAnswer按钮。
AddAnswer对象看起来像这样
protected void DodajOdp_Click(object sender, EventArgs e)
{
Button btnDO = (Button)sender;
string id = btnDO.ID;
for (int i = 0; i <= ListaPHOdp.Count; i++)
{
if (id == "DodajOdp" + i.ToString())
{
Label OdpowiedzList = new Label();
OdpowiedzList.ID = "PH" + i.ToString() + "L1"; //+ OstatnieIDInstrukcjiOdpowiedzi.ToString();
OdpowiedzList.ID = "PH0L1";
OdpowiedzList.Width = 200;
OdpowiedzList.Height = 32;
OdpowiedzList.Text = "Wprowadź odpowiedź ";// + OstatnieIDInstrukcjiOdpowiedzi.ToString();
OdpowiedzList.CssClass = "labelOne";
OdpowiedzList.Style.Value = "margin-left: 50px;";
ListaOdpowiedzidlaPytania.Add(OdpowiedzList.ID);
PH0.Controls.Add(OdpowiedzList);
}
}
}
几乎可以使用,但是在这种情况下,仅对于一个PlaceHolder ID为PH0。我知道我在代码中添加了此代码,但是我尝试了许多解决方案来对其进行更改。
第一个问题是。如何更改这段代码PH0.Controls.Add(OdpowiedzList);获取ID取决于按钮ID?
第二个问题是。如何将DodajOdp_Click对象添加到ID从“ DodajOdp”开始的所有新按钮中?
我希望对您来说很清楚。也许有人可以帮助我。