2015-12-24 7 views
10

Rozumiem pojęcie prostokąt Client dotycząca Form/control,
jeszcze nie rozumiem, jaka jest różnica między
Control.ClientRectangle i Control.DisplayRectangle ..Control.ClientRectangle vs Control.DisplayRectangle

Po przeczytaniu stron MSDN dla obu tych właściwości, nie jest jasne, kiedy jeden z nich wróci inną wartość od innych ..

na stronie MSDN dla .ClientRectangle mówi:

Obszar roboczy kontrolki to granice kontrolki minus elementy nieklientne, takie jak: Pasek tytułu, Granica, Paski przewijania i Menu.

To całkiem jasne.

jednak strony MSDN dla .DisplayRectangle mówi:

Dla klasy sterowania baza, to równa prostokąta klienta.
Jednak dziedziczenie kontrolek może wymagać zmiany, jeśli ich obszar klienta różni się od ich obszaru wyświetlania.

To nie jest tak oczywiste, teraz .. Jeżeli w kontrolce dziedziczenie, chciałbym, aby wartość .DisplayRectangle różni się od .ClientRectangle?

Control.ClientRectangle:
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.clientrectangle.aspx

Control.DisplayRectangle:
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.displayrectangle.aspx

Odpowiedz

21

DisplayRectangle jest wnętrze płótno z kontrolą, więc gdy masz kontrolę przewijania The DisplayRectangle byłby większy niż ClientRectangle, który jest tylko obszarem tego, co widzisz na ekranie:

panel1.AutoScrollMinSize = new Size(0, panel1.Height * 2); 
panel1.Paint += panel1_Paint; 

void panel1_Paint(object sender, PaintEventArgs e) { 
    e.Graphics.FillEllipse(Brushes.Red, panel1.DisplayRectangle); 
    e.Graphics.DrawEllipse(Pens.Green, panel1.ClientRectangle); 
} 

enter image description here

+1

Dziękuję bardzo Lars. Fragment kodu i zrzut ekranu wyniku są naprawdę pomocne. – spaceman