Console.WindowLeft 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定相對於螢幕緩衝區的主控台視窗區域最左邊的位置。
public:
static property int WindowLeft { int get(); void set(int value); };
public static int WindowLeft { get; [System.Runtime.Versioning.SupportedOSPlatform("windows")] set; }
public static int WindowLeft { get; set; }
[<set: System.Runtime.Versioning.SupportedOSPlatform("windows")>]
member this.WindowLeft : int with get, set
member this.WindowLeft : int with get, set
Public Shared Property WindowLeft As Integer
屬性值
以資料行數測量的主控台視窗最左邊的位置。
- 屬性
例外狀況
讀取或寫入資訊時發生錯誤。
在不是 Windows 的作業系統上叫用設定作業。
範例
下列範例會開啟80資料行的主控台視窗,並定義120資料行寬的緩衝區區域。 它會顯示視窗和緩衝區大小的相關資訊,然後等候使用者按下向左鍵或向右鍵鍵。 在先前的案例中, WindowLeft 如果結果為合法值,它會將屬性的值遞減一。 在後者的情況下,如果結果為合法,則會將屬性的值增加 WindowLeft 一。 請注意,此範例不需要處理 ArgumentOutOfRangeException ,因為它會檢查要指派給屬性的值 WindowLeft 不是負數,且不會造成 WindowLeft 和屬性的總和 WindowWidth 超過 BufferWidth 屬性值。
using namespace System;
void ShowConsoleStatistics()
{
Console::WriteLine("Console statistics:");
Console::WriteLine(" Buffer: {0} x {1}", Console::BufferHeight, Console::BufferWidth);
Console::WriteLine(" Window: {0} x {1}", Console::WindowHeight, Console::WindowWidth);
Console::WriteLine(" Window starts at {0}.", Console::WindowLeft);
Console::WriteLine("Press <- or -> to move window, Ctrl+C to exit.");
}
int main()
{
ConsoleKeyInfo key;
bool moved = false;
Console::BufferWidth = 120;
Console::Clear();
ShowConsoleStatistics();
do {
key = Console::ReadKey(true);
if (key.Key == ConsoleKey::LeftArrow)
{
int pos = Console::WindowLeft - 1;
if (pos >= 0 && pos + Console::WindowWidth <= Console::BufferWidth)
{
Console::WindowLeft = pos;
moved = true;
}
}
else if (key.Key == ConsoleKey::RightArrow)
{
int pos = Console::WindowLeft + 1;
if (pos + Console::WindowWidth <= Console::BufferWidth)
{
Console::WindowLeft = pos;
moved = true;
}
}
if (moved)
{
ShowConsoleStatistics();
moved = false;
}
Console::WriteLine();
} while (true);
}
using System;
public class Example
{
public static void Main()
{
ConsoleKeyInfo key;
bool moved = false;
Console.BufferWidth += 4;
Console.Clear();
ShowConsoleStatistics();
do
{
key = Console.ReadKey(true);
if (key.Key == ConsoleKey.LeftArrow)
{
int pos = Console.WindowLeft - 1;
if (pos >= 0 && pos + Console.WindowWidth <= Console.BufferWidth)
{
Console.WindowLeft = pos;
moved = true;
}
}
else if (key.Key == ConsoleKey.RightArrow)
{
int pos = Console.WindowLeft + 1;
if (pos + Console.WindowWidth <= Console.BufferWidth)
{
Console.WindowLeft = pos;
moved = true;
}
}
if (moved)
{
ShowConsoleStatistics();
moved = false;
}
Console.WriteLine();
} while (true);
}
private static void ShowConsoleStatistics()
{
Console.WriteLine("Console statistics:");
Console.WriteLine(" Buffer: {0} x {1}", Console.BufferHeight, Console.BufferWidth);
Console.WriteLine(" Window: {0} x {1}", Console.WindowHeight, Console.WindowWidth);
Console.WriteLine(" Window starts at {0}.", Console.WindowLeft);
Console.WriteLine("Press <- or -> to move window, Ctrl+C to exit.");
}
}
open System
let showConsoleStatistics () =
printfn "Console statistics:"
printfn $" Buffer: {Console.BufferHeight} x {Console.BufferWidth}"
printfn $" Window: {Console.WindowHeight} x {Console.WindowWidth}"
printfn $" Window starts at {Console.WindowLeft}."
printfn "Press <- or -> to move window, Ctrl+C to exit."
Console.BufferWidth <- Console.BufferWidth + 4
Console.Clear()
showConsoleStatistics ()
let mutable moved = false
while true do
let key = Console.ReadKey true
if key.Key = ConsoleKey.LeftArrow then
let pos = Console.WindowLeft - 1
if pos >= 0 && pos + Console.WindowWidth <= Console.BufferWidth then
Console.WindowLeft <- pos
moved <- true
elif key.Key = ConsoleKey.RightArrow then
let pos = Console.WindowLeft + 1
if pos + Console.WindowWidth <= Console.BufferWidth then
Console.WindowLeft <- pos
moved <- true
if moved then
showConsoleStatistics ()
moved <- false
printfn ""
Module Example
Public Sub Main()
Dim key As ConsoleKeyInfo
Dim moved As Boolean = False
Console.BufferWidth = 120
Console.Clear()
ShowConsoleStatistics()
Do While True
key = Console.ReadKey(True)
If key.Key = ConsoleKey.LeftArrow Then
Dim pos As Integer = Console.WindowLeft - 1
If pos >= 0 And pos + Console.WindowWidth <= Console.BufferWidth Then
Console.WindowLeft = pos
moved = True
End If
ElseIf key.Key = ConsoleKey.RightArrow Then
Dim pos As Integer = Console.WindowLeft + 1
If pos + Console.WindowWidth <= Console.BufferWidth Then
Console.WindowLeft = pos
moved = True
End If
End If
If moved Then ShowConsoleStatistics() : moved = False
Console.WriteLine()
Loop
End Sub
Private Sub ShowConsoleStatistics()
Console.WriteLine("Console statistics:")
Console.WriteLine(" Buffer: {0} x {1}", Console.BufferHeight, Console.BufferWidth)
Console.WriteLine(" Window: {0} x {1}", Console.WindowHeight, Console.WindowWidth)
Console.WriteLine(" Window starts at {0}.", Console.WindowLeft)
Console.WriteLine("Press <- or -> to move window, Ctrl+C to exit.")
End Sub
End Module
備註
主控台將矩形視窗表示為較大的矩形緩衝區區域。 視窗和緩衝區都是由其資料列數垂直測量,並依其資料行數水準測量。 緩衝區區域的維度是由和屬性所定義 BufferHeight BufferWidth 。 主控台區域的維度是由和屬性所定義 WindowHeight WindowWidth 。 WindowLeft屬性會決定要在主控台視窗的第一個資料行中顯示緩衝區區域的哪一個資料行。 屬性值的 WindowLeft 範圍可以從0到 BufferWidth - WindowWidth 。 若嘗試將它設定為超出範圍的值,則會擲回 ArgumentOutOfRangeException 。
當主控台視窗第一次開啟時,屬性的預設值 WindowLeft 為零,表示主控台所顯示的第一個資料行對應于緩衝區區域中位置為零) (資料行的第一個資料行。 主控台視窗和緩衝區區域的預設寬度為80個數據行。 這表示 WindowLeft 只有在主控台視窗變得較窄或緩衝區區域更寬時,才可以修改此屬性。
請注意,如果緩衝區區域的寬度超過主控台視窗的寬度, WindowLeft 當使用者使用水準捲軸來定義視窗與緩衝區區域的關聯性時,屬性的值就會自動調整。
嘗試 WindowLeft 在重新導向輸出時設定屬性的值時,會擲回 IOException 例外狀況。 若要避免這個例外狀況,只有在屬性傳回時,才可以設定這個屬性的值 IsOutputRedirected false
。