按下按钮时如何弹出一个类

时间:2011-03-05 18:03:32

标签: c#

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;
        }



    }
}

3 个答案:

答案 0 :(得分:1)

(我已经假设了WinForms,但是没有特别的原因 - 例如ASP.NET中的情况会完全不同。)

您应该创建一个新表单来托管矩阵效果,并在其中显示矩阵效果 形成。在不知道Matrix.MatrixEffect实际做什么的情况下,很难详细说明细节。你没有&#34;扔掉#34;一个班级到另一个窗口...

你还应该考虑是否弹出&#34;弹出&#34;你的意思是一个模态对话框,或者只是一个额外的窗口,它将会运行&#34;与现有的一样。

答案 1 :(得分:0)

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

您将无法使用单个类执行此操作,这些更改将意味着您的解决方案的新架构。

答案 2 :(得分:0)

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

//就是需要说的全部