【问题标题】:positioning and moving a shape in console application(console.write("bla bla bla");)在控制台应用程序中定位和移动形状(console.write("bla bla bla");)
【发布时间】:2011-08-11 08:59:57
【问题描述】:

我的控制台应用程序如下所示:

static void Main(string[] args)
{
    string Now = DateTime.Now.ToShortDateString();
    if (Now == "2011/08/12")
    {
        Console.Clear();
        Console.Write("Money..........");
        Console.Read();
    }
    else
    {
        int n = 6;

        var result = string.Join("\r\n", from i in Enumerable.Range(1, n)
                                         where i != 2
                                         let stars = Enumerable.Repeat('*', i)
                                         let indent = new string(' ', n - i)
                                         select indent + string.Join(" ", stars));

        Console.WriteLine(result);
        Console.Read();
    }
} 

上面的代码在c#中

我的问题:
1- 我们如何在控制台应用程序中找到一些形状示例,例如上面带有 *!
的示例 上面带有星星的例子太简单了/我正在寻找一些更好的形状,比如吊人(只是为了好玩)
2- 如何使用代码移动 console.write 窗口?
3- 如何在 console.write 窗口中移动形状?
4-如何设置 consol.write 窗口定位?

提前致谢

【问题讨论】:

  • @Shamim Hafiz 抱歉/我编辑了我的 Q
  • 对不起,我不明白你的代码做了什么,也不明白你想做什么。要么给出完整的代码,所以可以编译并做一些修复。
  • @zenwalker : 嗨 / Q 中的上面代码没问题,你可以在控制台应用程序中测试它们/除了我的 Q 与这些代码无关!请让我知道我的 Q 有什么问题!
  • 我确实运行了您在 Q 中粘贴的代码,但它没有编译。

标签: c# console-application shape


【解决方案1】:

你看过 MSDN http://msdn.microsoft.com/en-us/library/system.console.aspx

1 - 您必须自己制作形状,尽情享受吧。

这是一个可以做某事的代码,但您的示例中已经有一些代码。

int pos = 0
int limit = 80
while (true)
{
    StringBuilder line  = new StringBuilder(limit);
    for(int i = 0; i < limit; i++)
    {
        if (i = pos)
        {
            line.Append("A");
        }
        else
        {
            line.Append(" ");
        }
    }
    Console.WriteLine(line.ToString());
    if (pos = (limit - 1))
    {
        pos = 0;
    }
    else
    {
        pos++;
    }
}

2 - 您可以使用Console.WindowLeftConsole.WindowsTop 移动控制台窗口

3 - 这里的形状是错误的词和想法,您只能读取和写入文本行。您可以通过使用一个字符说0 作为背景,将整行填充为“空白”,然后使用其他一些字符来表示您的形状,可以创建移动形状的印象。请参阅上面的示例。

4 - 与 2 相同。

【讨论】:

  • 非常感谢您的回答/但是有没有办法在屏幕上移动控制台窗口?
  • 更改 Console.WindowLeft 和 Console.WindowsTop 不起作用吗?
  • @Jodrell:那是为了滚动内容(相对于滚动缓冲区)
【解决方案2】:

要重新定位实际的控制台窗口,您需要使用GetConsoleWindow(Win32 API)执行SetWindowPos,如here 所述。

[DllImport("kernel32.dll", ExactSpelling = true)]
private static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

//    
SetWindowPos(GetConsoleWindow(), 0, x, y, 0, 0, SWP_NOSIZE);

关于在控制台窗口内部操作形状,请查看MonoCurses。我不确定它是否可以在 Windows 上运行,但它非常先进(具有窗口、对话框、应用程序抽象和许多用于数据输入的小部件)

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2015-05-18
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多