Я пытаюсь создать рамку нестандартного размера в зависимости от размера окна консоли.Проблема в том, что когда он рисует последнюю строку, курсор перемещается вниз к следующей строке, что, в свою очередь, перемещает самую верхнюю строку за пределы экрана.
Размер буфера консоли такой же, как и размер консоли, чтобы удалить полосы прокрутки,что делает это возможным.
![Complete border with last row, creating new row](https://i.stack.imgur.com/GATXR.png)
Правой является полная граница, которая создает дополнительное пространство, потому что этозаполняет весь рядЛевый находится перед последней строкой, которая не имеет никаких проблем (потому что она не нарисовала последнюю).
Мой текущий код:
static void DrawFrame(string[,] frame)
{
string[] array = new string[frame.GetLength(1)];
string output;
for (int y = 0; y < frame.GetLength(1); y++)
{
output = "";
Console.SetCursorPosition(0, y);
for (int x = 0; x < frame.GetLength(0); x++)
{
output += frame[x, y];
}
array[y] = output;
Console.Write(output);
}
}
Кадр строковой переменной имеет значение:
╔══════════════════════╗
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
╚══════════════════════╝
Предполагаемое поведение - не создавать дополнительную строку при выполнении последней строки, для которой до сих пор я не нашел никакого решения.
Любая помощь приветствуется!
PS: Console.CursorVisible = false;
не является решением.
PS2: код для создания границы следующий:
static string[,] SetBorder(string[,] frame)
{
for (int y = 0; y < frame.GetLength(1); y++)
{
for (int x = 0; x < frame.GetLength(0); x++)
{
if (y == 0)
{
if (x == 0)
{
frame[x, y] = "╔";
}
else if(x == frame.GetLength(0) - 1)
{
frame[x, y] = "╗";
}
else
{
frame[x, y] = "═";
}
}
else if (y == frame.GetLength(1) - 1)
{
if (x == 0)
{
frame[x, y] = "╚";
}
else if (x == frame.GetLength(0) - 1)
{
frame[x, y] = "╝";
}
else
{
frame[x, y] = "═";
}
}
else
{
if (x == 0 || x == frame.GetLength(0) - 1)
{
frame[x, y] = "║";
}
else
{
frame[x, y] = " ";
}
}
}
}
return frame;
}
Размер консоли также определяется в начале как размер размеров фреймов.
Edit1: Для тех, кто пытается отладить мой код, я свяжу его здесь .