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;
}
}
}
答案 0 :(得分:1)
(我已经假设了WinForms,但是没有特别的原因 - 例如ASP.NET中的情况会完全不同。)
您应该创建一个新表单来托管矩阵效果,并在其中显示矩阵效果
形成。在不知道Matrix.MatrixEffect
实际做什么的情况下,很难详细说明细节。你没有&#34;扔掉#34;一个班级到另一个窗口...
你还应该考虑是否弹出&#34;弹出&#34;你的意思是一个模态对话框,或者只是一个额外的窗口,它将会运行&#34;与现有的一样。
答案 1 :(得分:0)
看起来这是一个控制台应用程序。如果要打开新的控制台窗口,则必须使用System.Diagnostics.Process类生成新进程。您可以使用命令行参数或环境变量将数据传递到新应用程序。对于更高级的方法,您可以使用标准输入和输出来回传递数据。
您将无法使用单个类执行此操作,这些更改将意味着您的解决方案的新架构。
答案 2 :(得分:0)
process.start(@"something.exe");
//就是需要说的全部