Ann*_*a T 1 c# asp.net visual-studio-2008
如何获取最后一次单击面板上对象的名称?诀窍是面板上有一大堆按钮(btn [1] ... btn [200]).如何检查是否单击按钮b [180],b [11]或甚至是面板外部(无按钮)?此外,按钮是通过编码在页面加载时生成的.谢谢.安娜
编辑:谢谢!出现的另一个问题(这会产生一个NULL对象引用):我有一个与buttonHandler()处于同一级别的方法,它被命名为HowManyClicked(),并且它是从buttonHandler()中调用的.在HowManyClicked()里面我想将Button btn1 = Panel2.FindControl(x)识别为Button; 其中x是,例如,buttonArray [2,3].但我总是得到NULL.按钮数组buttonArray是否在生成它的方法中不能通过名称识别?
public void buttonHandler(object sender, EventArgs e)
{
Button btn = sender as Button;
//string tt = btn.ToolTip.ToString();
btn.BackColor = Color.Red;
statusL.Text = HowManyClicked().ToString();
}
public int HowManyClicked()
{
int sum=0;
for (int a = 0; a < 10; a++)
for (int b = 0; b < 14; b++)
{
string x = "buttonArray[" + a + ", " + b + "]";
statusL.Text = x;
Button btn1 = Panel2.FindControl(x) as Button;
if (btn1.BackColor == Color.Red) sum += 1;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
正如@AVD所评论的那样,您可以获得发回发送者对象的回发的按钮,您也可以使用按钮对象中的CommandName和CommandArgument属性(它们通常在按钮位于等内部时使用Grid,DataList但是您可以在此上下文中使用它们你需要):
protected void Page_Init(object sender, EventArgs e)
{
var s = Enumerable.Range(1, 10);
foreach (var item in s)
{
var b = new Button();
b.Text = "My Button " + item.ToString();
b.CommandName = "custom command";
b.CommandArgument = item.ToString();
b.Click += new EventHandler(b_Click);
this.myPanel.Controls.Add(b);
}
}
void b_Click(object sender, EventArgs e)
{
var current = sender as Button;
this.lblMessage2.Text = "Clicked from array buttons: <br/>Command Name: " + current.CommandName + "<br/>Args: " + current.CommandArgument + "<br/>Button Unique ID: " + current.UniqueID + "<br/>Client ID: " + current.ClientID;
}
Run Code Online (Sandbox Code Playgroud)
页:
<asp:Panel runat="server" ID="myPanel">
</asp:Panel>
<asp:Label ID="lblMessage2" runat="server" />
Run Code Online (Sandbox Code Playgroud)
此代码生成类似于:

作为附加的注释,Microsoft建议在创建动态控制PreInit的事件或情况下,你使用的是母版页,在Init事件
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.ViewState["count"] = 0;
}
}
protected void Page_Init(object sender, EventArgs e)
{
var s = Enumerable.Range(1, 10);
foreach (var item in s)
{
var b = new Button();
b.Text = "My Button " + item.ToString();
b.Click += new EventHandler(buttonHandler);
this.myPanel.Controls.Add(b);
}
}
void buttonHandler(object sender, EventArgs e)
{
// update here your control
var b = sender as Button;
b.BackColor = Color.Red;
HowManyClicked();
}
private void HowManyClicked()
{
var c = (int)this.ViewState["count"];
c++;
this.ViewState["count"] = c;
this.lblMessage2.Text = "Clicked controls: " + this.ViewState["count"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
这产生了:

| 归档时间: |
|
| 查看次数: |
9827 次 |
| 最近记录: |