Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态创建按钮以调用方法并传入参数_C#_Asp.net - Fatal编程技术网

C# 动态创建按钮以调用方法并传入参数

C# 动态创建按钮以调用方法并传入参数,c#,asp.net,C#,Asp.net,我有一个带有键值对的字典,需要循环遍历键值对,并为每个键值对创建一个按钮,然后连接该按钮以调用一个方法DisplayDocument(stringid),并将键作为参数传入 这是我到目前为止所拥有的 // test data var documents= new Dictionary<string,string>(); documents.Add("69110","Diploma"); documents.Add("76

我有一个带有键值对的字典,需要循环遍历键值对,并为每个键值对创建一个按钮,然后连接该按钮以调用一个方法DisplayDocument(stringid),并将键作为参数传入

这是我到目前为止所拥有的

        // test data
        var documents= new Dictionary<string,string>();
        documents.Add("69110","Diploma");
        documents.Add("76404", "Licensure");


        foreach (KeyValuePair<string, string> item in documents)
        {

            MyStringBuilder=MyStringBuilder.Append(item.Value + "   " + item.Key + "<br />"); 

        }
        printFaxDocuments.InnerHtml = MyStringBuilder.ToString();
//测试数据
var documents=newdictionary();
文件。添加(“69110”、“文凭”);
文件。添加(“76404”、“许可证”);
foreach(文档中的KeyValuePair项)
{
MyStringBuilder=MyStringBuilder.Append(item.Value+“”+item.Key+“
”; } printFaxDocuments.InnerHtml=MyStringBuilder.ToString();
我要做的是打印出文档键和值,然后单击一个按钮以查看文档。我构建了一个方法来查看文档,它需要传入键值。我该怎么做


我不知道如何在文本数据中插入按钮。我需要写出键和值添加按钮添加一个

,然后对字典中的下一项再次执行相同的操作。

下面我在OnInit方法中创建了按钮控件,并为每个控件分配了相同的单击事件处理程序

该键存储在Buttons CommandArgument属性中,该属性在事件处理程序中检索并传递给DisplayDocument方法

protected override void OnInit(EventArgs e)
{
    // test data
    var documents = new Dictionary<string, string>();
    documents.Add("69110", "Diploma");
    documents.Add("76404", "Licensure");

    foreach (KeyValuePair<string, string> item in documents)
    {
        Button button = new Button();
        button.Text = string.Format("Button: {0}", item.Key);
        button.CommandArgument = item.Key;
        button.Click += ButtonClicked;

        ButtonContainer.Controls.Add(button);
    }

    base.OnInit(e);
}

protected void ButtonClicked(object sender, EventArgs e)
{
    Button button = (Button) sender;
    string id = button.CommandArgument;

    DisplayDocument(id);
}

private void DisplayDocument(string id)
{
    //Do something
}
然后,您可以根据需要添加到CSS类以修改布局(边距等)

希望这有帮助。

演示了一种更强大的参数传递方法,如果您想传递更复杂的参数

添加单击事件处理程序:

button1.Click += delegate(object sender, EventArgs e) { 
    button_Click(sender, e, "String or other types eg, enum..", SomeCustomEnum.SomeSelection); 
};
然后只需将参数添加到click handler方法:

void button_Click(object sender, EventArgs e, string messageButCanBeIntEtc, SomeCustomEnum type)  
{  
    // do things
}

谢谢,这真的很有帮助。如何添加换行符以使按钮垂直堆叠而不是水平堆叠?
button1.Click += delegate(object sender, EventArgs e) { 
    button_Click(sender, e, "String or other types eg, enum..", SomeCustomEnum.SomeSelection); 
};
void button_Click(object sender, EventArgs e, string messageButCanBeIntEtc, SomeCustomEnum type)  
{  
    // do things
}