2011-03-05 84 views
0
private void buttonPlay_Click(object sender, EventArgs e)//This is the the button. 
{ 
    //This is the class that I want to throw to another window and run at the same time. 
    //I want this class to pop up in another window. How would I do this? 
    Matrix.MatrixEffect();  
} 

这是矩阵类:你怎么做一个类时弹出按钮被按下

using System; 

namespace JasonsMatrix 
{ 
    class Matrix 
    { 
     internal static void MatrixEffect() 
     { 

      Console.Title = "The Matrix (Remember It's a Secret)"; 
      Console.ForegroundColor = ConsoleColor.DarkGreen; 
      Console.WindowLeft = Console.WindowTop = 0; 
      Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight; 
      Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth; 

#if readkey 
      Console.WriteLine("H1T 7NY K3Y T0 C0NT1NU3 =/"); 
      Console.ReadKey(); 
#endif 

      Console.CursorVisible = false; 
      int width, height; 
      int[] y; 
      int[] l; 
      Initialize(out width, out height, out y, out l); 
      int ms; 

      while (true) 
      { 
       DateTime t1 = DateTime.Now; 
       MatrixStep(width, height, y, l); 
       ms = 10 - (int)((TimeSpan)(DateTime.Now - t1)).TotalMilliseconds; 

       if (ms > 0) 
        System.Threading.Thread.Sleep(ms); 

       if (Console.KeyAvailable) 
        if (Console.ReadKey().Key == ConsoleKey.F5) 
         Initialize(out width, out height, out y, out l); 
      } 
     } 

     static bool thistime = false; 

     private static void MatrixStep(int width, int height, int[] y, int[] l) 
     { 
      int x; 
      thistime = !thistime; 

      for (x = 0; x < width; ++x) 
      { 
       if (x % 11 == 10) 
       { 
        if (!thistime) 
         continue; 

        Console.ForegroundColor = ConsoleColor.White; 
       } 
       else 
       { 
        Console.ForegroundColor = ConsoleColor.DarkGreen; 
        Console.SetCursorPosition(x, inBoxY(y[x] - 2 - (l[x]/40 * 2), height)); 
        Console.Write(R); 
        Console.ForegroundColor = ConsoleColor.Green; 
       } 
       Console.SetCursorPosition(x, y[x]); 
       Console.Write(R); 
       y[x] = inBoxY(y[x] + 1, height); 
       Console.SetCursorPosition(x, inBoxY(y[x] - l[x], height)); 
       Console.Write(' '); 
      } 
     } 

     private static void Initialize(out int width, out int height, out int[] y, out int[] l) 
     { 
      int h1; 
      int h2 = (h1 = (height = Console.WindowHeight)/2)/2; 
      width = Console.WindowWidth - 1; 
      y = new int[width]; 
      l = new int[width]; 
      int x; 
      Console.Clear(); 
      for (x = 0; x < width; ++x) 
      { 
       y[x] = r.Next(height); 
       l[x] = r.Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1)); 
      } 
     } 

     static Random r = new Random(); 

     static char R 
     { 
      get 
      { 
       int t = r.Next(10); 
       if (t <= 2) 
        return (char)('0' + r.Next(10)); 
       else if (t <= 4) 
        return (char)('a' + r.Next(27)); 
       else if (t <= 6) 
        return (char)('A' + r.Next(27)); 
       else 
        return (char)(r.Next(32, 255)); 
      } 
     } 

     public static int inBoxY(int n, int height) 
     { 
      n = n % height; 
      if (n < 0) 
       return n + height; 
      else 
       return n; 
     } 



    } 
} 
+1

这是什么(除C#这是显而易见的):ASP.NET,Silverlight中,的WinForms,WPF,Windows手机,Xbox 360游戏机,Zune播放器, ...? – 2011-03-05 18:05:44

+0

Mercer,所以你有一个控制台应用程序。它也使用表单。所以当你运行它时,会出现一个控制台窗口,并且在某个时候,窗体也会出现。那是对的吗?现在,当您按下按钮时,是否要将效果显示在原始控制台窗口中?或新窗口?或者你是否想要在表单中显示它(这将需要更改Matrix类)? – 2011-03-06 00:29:50

回答

1

(我假设的WinForms,但没有特别的理由 - 事情会完全不同以ASP.NET为例。)

您应该创建一个新表单来托管矩阵效果,并在该表单中显示矩阵效果。在不知道Matrix.MatrixEffect究竟是什么的情况下,很难详细说明细节。你不要把课程“扔”到另一个窗口......

你还应该考虑是否通过“弹出”你是指一个模式对话框,或者只是一个额外的窗口,它将同时“运行”你现有的。

+0

这将是一个额外的窗口,将与现有的窗口一起运行。 – 2011-03-05 18:10:36

+0

@James Mercer,你好像忽略了这些问题:请定义* Window *。这是什么类型的应用程序? – 2011-03-05 18:13:12

+0

Matrix是一个控制台应用程序,并且该按钮位于窗体上。 – 2011-03-05 18:29:03

0

看起来这是一个控制台应用程序。如果你想打开一个新的控制台窗口,你必须使用System.Diagnostics.Process类生成一个新的进程。您可以使用命令行参数或环境变量将数据传递给新应用程序。对于更高级的方法,您可以使用标准输入和输出来回传递数据。

您将无法使用单个类来完成此操作,这些更改将为您的解决方案提供新的体系结构。

+0

我不知道你在说什么。你能解释一下,对我来说这是愚蠢的条款。 – 2011-03-05 18:47:38

0
process.start(@"something.exe"); 

//被所有的一切需要的是说

相关问题