首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能创造功能

功能创造功能
EN

Stack Overflow用户
提问于 2014-02-20 12:48:06
回答 3查看 105关注 0票数 0

我试图在Winforms中创建下面代码的函数。您看到的是一个名为ytplayerSearch的函数,而不是ytplayer。目前的代码工作,但我一直试图使它更干净。

代码语言:javascript
复制
private void btPlayMin_Click(object sender, EventArgs e)
        {
            ytplayer.playLink(sender, e, link);
            ytplayer.miniMax("Normal", new Size(300, 24), new Size(400, 95), false, "", FormBorderStyle.FixedToolWindow, true);
            ytplayer.TopMost = true;
            ytplayer.BringToFront();
            ytplayer.TopMost = false;
            int x = Screen.PrimaryScreen.WorkingArea.Width - 375;
            ytplayer.Location = new Point(x, 0);
            ytplayer.Show();
            this.Close();
        }

        private void btPlayNorm_Click(object sender, EventArgs e)
        {
            ytplayer.playLink(sender, e, link);
            ytplayer.miniMax("Minimal", new Size(300, 240), new Size(400,335), true, "YoutubePlayer", FormBorderStyle.FixedSingle, false); 
            ytplayer.TopMost = true;
            ytplayer.BringToFront();
            ytplayer.TopMost = false;
            ytplayer.Show();
            this.Close();
        }

问题是我不太知道如何将一个函数发送到另一个函数。较低的代码可能会使我的问题更清楚一些。

代码语言:javascript
复制
private void settingsYTP(.....problem.....)
{
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-20 13:01:28

如果我明白的话,你需要这样的东西

代码语言:javascript
复制
private void btPlayMin_Click(object sender, EventArgs e)
{
    settingsYTP(sender, e, link, "Normal", new Size(300, 24), new Size(400, 95), false, "", FormBorderStyle.FixedToolWindow, true);
    int x = Screen.PrimaryScreen.WorkingArea.Width - 375;
    ytplayer.Location = new Point(x, 0);
    ytplayer.Show();
    this.Close();
}

private void btPlayNorm_Click(object sender, EventArgs e)
{
    settingsYTP(sender, e, link, "Minimal", new Size(300, 240), new Size(400,335), true, "YoutubePlayer", FormBorderStyle.FixedSingle, false);
    ytplayer.Show();
    this.Close();
}

private void settingsYTP(object sender, EventArgs e, string link, string minmax,Size size1, Size size2, bool b1, string text,FormBorderStyle bs, bool b2)
{
    ytplayer.playLink(sender, e, link);
    ytplayer.miniMax(minmax, size1, size2, b1, text, bs, b2); 
    ytplayer.TopMost = true;
    ytplayer.BringToFront();
    ytplayer.TopMost = false;
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-20 12:55:46

您可以按建议使用委托,但我更愿意查看Func<>和/或Action<>

MSDN示例:

代码语言:javascript
复制
public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}
票数 2
EN

Stack Overflow用户

发布于 2014-02-20 12:51:35

你可以使用委托。

代码语言:javascript
复制
delegate ReturnType YourFunctionDelegate(argType yourArgument);

http://msdn.microsoft.com/en-us/library/ms173171.aspx

例如,假设要传递的函数如下:

代码语言:javascript
复制
void MyFunction(int arg1, int arg2);

您可以为它声明一个委托:

代码语言:javascript
复制
delegate void MyFunctionDelegate(int arg1, int arg2);

您可以将委托看作表示具有特定签名的函数的类型。

现在,回到要传递MyFunction的函数。您可以通过指定接受委托YourFunctionDelegate的另一个参数来做到这一点。

代码语言:javascript
复制
private void settingsYTP(otherArguments, MyFunctionDelegate function) 
{
    // Some code ...

    // Use the delegate function
    function(1, 2);

    // Some other cose...
}

最后,只是

代码语言:javascript
复制
MyFunctionDelegate functionDelegate = MyFunction;
settingsYTP(otherArguments, functionDelegate);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21908277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档