1

我还是新手,所以我会尽力解释我的问题。英语不是我的母语,所以如果我用错了一些术语,我深表歉意。

我有一个 100 行代码,每次按下按钮时都会执行。我的问题是,我有 20 个按钮,它们都包含相同的代码(它们在从不同来源获取信息的方式上略有不同)。有没有办法做到这一点,而不是复制相同的代码太多次。

基本上我的代码是这样的:

    private void button1_Click(object sender, EventArgs e)
    {
    //file data source url
    sourceUrl = ("www.myurl.com")

    //Grab data
    code
    code
    code

   //Store data
    code
    code
    code

   //Write data
    code
    code
    code
    }

除了“sourceUrl”部分之外,每个按钮都有相同的代码。如果我想添加更多按钮,我必须复制>粘贴整个代码,我的应用程序开始变得巨大。有没有办法通过只编写一次代码来缩小代码,然后每次按下按钮时调用一个动作或方法。因此,我不会多次使用 100 行代码,而是为每个按钮设置一个行代码,并在顶部设置一个 100 行代码,作为该行代码的来源。

提前致谢

4

4 回答 4

8

使用Tag按钮的属性来存储源 url 字符串,然后为每个按钮设置相同的事件处理程序

private void buttonCommonHandler_Click(object sender, EventArgs e)
{
     Button b = sender as Button;
     CommonMethod(b.Tag.ToString());
}

private void CommonMethod(string sourceUrl)
{
   // Execute the common code here....
}

您可以使用表单设计器窗口设置通用处理程序和标记,或者您可以动态模仿设计器在InitializeComponent调用中为您准备的代码

button1.Click += buttonCommonHandler;
button1.Tag = "www.myurl.com";
button2.Click += buttonCommonHandler;
button2.Tag = "www.anotherurl.com";
于 2013-09-09T12:57:12.783 回答
2

这就是函数的用途。使用此布局:

private void YourFunc(string sourceUrl)
{
    //Grab data
    code

    //Store data
    code

    //Write data
    code
}

现在您的按钮的事件处理程序如下所示:

private void button1_Click(object sender, EventArgs e)
{
    YourFunc("www.myurl.com");
}

private void button2_Click(object sender, EventArgs e)
{
    YourFunc("www.myurl2.com");
}
于 2013-09-09T12:58:07.087 回答
0

在这里我们可以使用 useCommandName属性,通过传入URL每个按钮的CommandName属性并将其作为参数传递给您Common Method来获取数据,因此您可以创建一个函数并通过您的btn_Click事件调用它。

<asp:Button ID="button1" runat="server" Text="clickMe"   
                        CommandName="put your URL here" OnCommand="button1_Click" />
                        <%--OnClick="button1_Click" />--%>

看到这里我们可以在属性中传递你的'URL' CommandName,有几件事要记住,这里我们使用OnCommand事件而不是OnClick按钮事件,所以我们可以在这里使用'CommandName'属性.1。OnCommand MSDN 2.命令名 MSDN

 // private void button1_Click(object sender, EventArgs e)
       private void button1_Click(object sender, CommandEventArgs e)
        {             
         string sourceUrl = Convert.tostring(e.CommandName) 
         // Call function to grab data pass URL as parameter.
          GrabDate (sourceUrl ) ;

所以现在我们可以URL 从按钮CommandName属性中获取值。

3. EventArgs 类

4. CommandEventArgsClass

于 2013-09-09T13:57:14.013 回答
0

当然有办法。只需使整个函数成为一个将 url 作为字符串参数的函数。然后从后面的代码中调用该函数。

private void button1_Click(object sender, EventArgs e)
{
    //file data source url
    ProcessData("www.myurl.com");
}

private void ProcessData(string sourceUrl)
{
    //Grab data
    code
    code
    code

    //Store data
    code
    code
    code

    //Write data
    code
    code
    code
}
于 2013-09-09T12:57:29.657 回答