James Mercer
James Mercer

Reputation: 111

How do you make a class pop up when a button is pressed

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

This is the matrix class:

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



    }
}

Upvotes: 0

Views: 333

Answers (3)

James Mercer
James Mercer

Reputation: 111

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

//is all that was needed to be said

Upvotes: 0

Paul Keister
Paul Keister

Reputation: 13097

It looks like this is a console application. If you want to open a new console window, you'll have to spawn a new process using the System.Diagnostics.Process class. You can pass data to the new application using command line parameters or environment variables. For a more advanced approach, you can pass data back and forth using standard input and output.

You won't be able to do this with a single class, these changes will mean a new architecture for your solution.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1503924

(I've assumed WinForms, but for no particular reason - things would be completely different in ASP.NET for example.)

You should create a new form to host the matrix effect, and show the matrix effect in that form. It's hard to say more about the details without knowing what Matrix.MatrixEffect actually does. You don't "throw" a class to another window...

You should also consider whether by "pop up" you mean a modal dialog, or just an extra window which will "run" at the same time as your existing one.

Upvotes: 1

Related Questions