2012-11-09 50 views
6

Trong bảng điều khiển, tôi vẽ các nút điều khiển như vị trí nút/hộp văn bản bắt đầu (0,0) trong bảng điều khiển. Các điều khiển này là vô hình và vô hiệu hóa khi bắt đầu. Tôi có một nút bên ngoài bảng điều khiển làm cho các nút/hộp văn bản này hiển thị khi được nhấn và định vị chúng ở vị trí mới trong bảng điều khiển.vẽ một nút trong bảng điều khiển winform trong khi bảng điều khiển được cuộn

Vấn đề là nếu người dùng cuộn bảng điều khiển đến một số (x, y) và sau đó nhấn nút 'hiển thị' vị trí mới (x, y) của nút được tính từ vị trí hiện tại (x, y) của bảng điều khiển - không phải từ đầu (0,0) của bảng điều khiển.

Tôi tự hỏi nếu đây là hành vi chính xác của bảng điều khiển và rằng để khắc phục điều này tôi cần phải xem xét các this.VerticalScroll.Value như một (x, y) bù đắp khi tôi tái định vị các nút.

enter image description here

+2

Bạn cần phải sử dụng thuộc tính AutoScrollPosition của bảng điều khiển để điều chỉnh Vị trí của nút. –

+0

Hình minh họa hình ảnh sẽ giúp hiển thị hành vi mong đợi và hiện tại. – Neolisk

+0

tôi có một bức ảnh nhưng không thể đăng nó ... cần danh tiếng hơn trên SO. @HansPassant Từ MSDN AutoScrollPosition trông giống như những gì tôi cần. MyButton.Location = new Point ( 0 + panel1.AutoScrollPosition.X, 0 + panel1.AutoScrollPosition.Y); – Davvit

Trả lời

0

Không chắc chắn nếu nó sẽ giúp trong tình huống của bạn, nhưng tôi nghĩ rằng nó có giá trị cố gắng:

Nếu bạn đã thiết kế các Bảng điều chỉnh sử dụng Visual Designer, tôi khuyên bạn nên sử dụng hai Panels: một kích thước đầy đủ giữ tất cả các điều khiển, kích thước của nó cho phép thiết kế dễ dàng; và cái nhỏ hơn có kích thước vật lý là . Sau đó, chỉ cần thêm một con lớn làm con duy nhất của số nhỏ hơn (như innerPanel trong bottomPanel).

Xem bài viết này Article: WinForms AutoScroll Experiment để biết thêm chi tiết.

2

Đây là những gì phù hợp với tôi. Khi bạn nhận được Y nút bạn/hộp vv làm:

relativeControlTop = theControl.Top - thePanel.AutoScrollPosition.Y;

Khi bạn thiết lập đầu làm:

relativeControlTop = theControl.Top + thePanel.AutoScrollPosition.Y;

Hope this helps.

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