0

コンソールでボックスを描画しようとしていますが、新しい行を入力せずに描画することができません。

私はこのようなものを作ります:

-----
|   |
_____

ただし、入力行はその真下にあり、ボックスの上の行を削除します。

試してみましConsole.setCursorPositionたが、最後の行はすでに入力されているため、新しい行が作成されています。

新しい行が作成されないようにするにはどうすればよいですか?

前もって感謝します

編集 コンソールウィンドウをキャンバスとして使用することは可能ですか?次のサイズのウィンドウを想定します

高さ:50幅:100

上記のコンソールサイズ内の任意のタイルに任意の文字を配置できます。

もしそうなら、これはどのように可能でしょうか?

4

2 に答える 2

0

非常に似たようなタスクには、Microsoftの人がいると思います。見てください:

http://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspx 非常に似たようなものがあります。お役に立てれば。

編集:

Console.Write("\b\b");

これにより、改行の最後の'\ r\n'文字が削除されます。

于 2012-05-06T16:17:51.557 に答える
0

ASCII文字からこのボックスを作成するために作成したコードを投稿すると便利です。

を使用する場合は、代わりに最後の行にメソッドをConsole.WriteLine()使用してください。Console.Write()したがって、質問のボックスの場合、コードは次のようになります。

...
Console.WriteLine("-----");
Console.WriteLine("|   |");
Console.Write("-----");
...

これが役立つかどうか教えてください。

サンプルアプリケーションでテストを行いましたが、余分な行が作成されていないようです。

アップデート

ボックスをコンソールウィンドウの境界線として使用する場合は、描画しているボックスの一番下の行に最後文字を追加しないのが(唯一ではないにしても)最も簡単な解決策だと思います。

アップデートII

最後の線を描く前に、簡単なトリックを使用してコンソールウィンドウの高さを動的に変更することができます。これにより、ウィンドウがスクロールされなくなります。

次のようなコードを試してください。

int width = Console.WindowWidth;
int height = Console.WindowHeight;
int i, j;
for (i = 0; i < width; ++i)
{
    Console.Write("-");
}

for (j = 0; j < height - 2; ++j)
{
    Console.Write("|");

    for (i = 0; i < width - 2; ++i)
    {
        Console.Write(" ");
    }

    Console.Write("|");
}

//enlarge window in order to prevent it from being scrolled
Console.WindowHeight += 1;

for (i = 0; i < width; ++i)
{
    Console.Write("-");
}
//restore window's original size
Console.WindowHeight -= 1;
//set cursor inside the border
Console.SetCursorPosition(1, 1);

これにより、境界線全体がウィンドウに表示されるようになります。

アップデートIII

提案された解決策

上記のコードを使用しますが、のConsole.BufferWidth代わりに使用しますConsole.WindowHeight。正しく機能しているようで、ウィンドウのサイズを変更する必要はありません。

于 2012-05-06T16:41:21.560 に答える