2009-12-16 29 views
29

MSDN không cung cấp, IMHO, một sự khác biệt rõ ràng giữa Control.PointToScreen (link) và Control.PointToClient (link) phương pháp.kiểm soát PointToClient() vs PointToScreen()

Có ai đó có thể giải thích bằng một vài từ đơn giản sự khác biệt giữa các phương pháp này hay không. Đặc biệt là không rõ ràng đối với tôi khái niệm "Khách hàng".

Tôi hiểu PointToScreen phối hợp màn hình thực (với [0, 0] ở góc trên bên trái của màn hình) của điểm đã cho.

By dụ, gỡ lỗi một số mã tôi có

?click.Location 
{X = 3 Y = 9} 

?shapeSender.PointToClient(click.Location) 
{X = -470 Y = -565} 

?shapeSender.PointToScreen(click.Location) 
{X = 476 Y = 583} 

Cảm ơn.

Trả lời

40

Cách tốt nhất để nghĩ về nó là: tọa độ tương đối so với absolution. Trường hợp tọa độ tương đối là tương đối từ góc trên bên trái của khu vực khách hàng của một cửa sổ. Khu vực khách hàng của một cửa sổ là một cửa sổ trừ đường viền của nó. Các tọa độ tương đối hữu ích vì chúng không thay đổi khi người dùng di chuyển cửa sổ và không phụ thuộc vào kích thước đường viền và chú thích của cửa sổ.

Hầu hết các tọa độ trong Winforms là tọa độ tương đối, ví dụ MouseEventArgs.Location. Một số là tuyệt đối, Cursor.Position ví dụ. Nếu bạn vượt qua một tọa độ tương đối với PointToClient bạn sẽ nhận được rác, như bạn đã thấy trong phiên gỡ lỗi của mình. Nó phải là một tọa độ tuyệt đối.

Một số thuộc tính tọa độ có thể là cả hai, ví dụ như Control.Location. Trên điều khiển con, nó đại diện cho vị trí của kiểm soát tương đối so với vùng chứa của nó. Vị trí của biểu mẫu là tuyệt đối. Điều đó dường như mâu thuẫn biến mất khi bạn nghĩ rằng một Control.Location là tương đối từ một phụ huynh của kiểm soát. Phụ huynh của một biểu mẫu là máy tính để bàn.

Cách sử dụng phổ biến là ánh xạ tọa độ tương ứng với một điều khiển với điều khiển khác. Bản đồ đầu tiên với tọa độ màn hình tuyệt đối với control1.PointToScreen(), sau đó ánh xạ kết quả tới điều khiển khác bằng control2.PointToClient(). Giá trị điểm thay đổi theo độ lệch giữa các điều khiển, bất kể cha mẹ chúng là ai. Làm theo cách khác là rất đau đớn.

Tránh xa rắc rối bởi chỉ bao giờ chuyển một tọa độ tuyệt đối tới PointToClient và tọa độ tương đối với PointToScreen.

+0

Có một (bị từ chối) [đề xuất chỉnh sửa] (http://stackoverflow.com/review/suggested-edits/2557841) đề cập rằng không có thuộc tính nào có tên là 'Mouse.Position'. Điều này có vẻ đúng với tôi. Tôi muốn áp dụng các chỉnh sửa nhưng tôi không biết Winforms vì vậy tôi không biết nếu bạn có nghĩa là 'Control.MousePosition' hoặc' Cursor.Location' – doubleDown

+0

Tôi cho rằng họ có thể đã gọi nó là PointFromClientToScreen nhưng đó là quá mức cần thiết. Vì PointFromScreenToScreen không có ý nghĩa. –

+0

Tôi phải xóa nhận xét trước đó của mình. Nó * không * cho phối hợp màn hình. –

4

Tọa độ "khách hàng" liên quan đến phía trên cùng bên trái của khu vực khách hàng của kiểm soát. Các tọa độ "màn hình" liên quan đến phía trên bên trái của màn hình (chính).

"Khu vực khách hàng" là khu vực kiểm soát có thể đặt điều khiển con. Hình chữ nhật của biểu mẫu của khách hàng là khu vực bên trong biểu mẫu, không bao gồm đường viền và thanh tiêu đề. Đối với hầu hết các điều khiển khác, vùng máy khách giống với vùng mà điều khiển chiếm trên màn hình.

PointToScreen chuyển đổi tọa độ của khách hàng thành tọa độ màn hình. PointToClient làm ngược lại: nó chuyển đổi tọa độ màn hình thành tọa độ của khách hàng.

3

Giả sử màn hình là 800x600 và cửa sổ là 50,50 có kích thước 200x200 pixel. Nếu điểm P nằm ở 10,10 so với phía trên bên trái của cửa sổ thì PointToScreen (P) sẽ trả về 60,60. Nếu P được gán cho PointToClient (P) với tay cầm cửa sổ thì chúng ta sẽ nhận được 10,10 lần nữa.

Hope mà xóa sự nhầm lẫn

+0

Điều gì xảy ra nếu trong cửa sổ tôi có bảng điều khiển ở mức 10, 10 và tôi gọi phương thức Button (tại 5, 5 trong bảng điều khiển) PointToClient ([5, 5])? – serhio

9

Phương pháp PointToClient là ngược lại của phương pháp PointToScreen.

(Nếu nó không được quá lâu và lặp đi lặp lại, họ sẽ được đặt tên ScreenPointToClientPointClientPointToScreenPoint.)

Bạn sử dụng chuyển đổi khi bạn có một loại tọa độ và cần người kia, ví dụ nếu bạn có tọa độ của một nhấp chuột tương đối so với màn hình và cần biết vị trí người dùng nhấp vào trong điều khiển nào.

Nếu bạn chuyển đổi điểm màn hình nằm ngoài vùng khách hàng, bạn sẽ nhận được các thành phần tọa độ âm hoặc lớn hơn kích thước của vùng khách hàng điều khiển.

Các vấn đề liên quan