2010-07-09 28 views
23

Tôi đang viết một tùy chỉnh TextBox rằng khi đạt tiêu điểm thay đổi kiểu đường viền của nó.Cách đặt Z-order của một điều khiển bằng cách sử dụng WinForms

Khi thêm đường viền làm cho kiểm soát trùng lặp với những người lân cận, tôi tạm thời đưa hộp văn bản vào trước hộp thoại (sử dụng textBox.BringToFront()).

Tuy nhiên, sau khi chỉnh sửa xong và tiêu điểm bị mất, tôi muốn gửi điều khiển trở lại vị trí ban đầu của nó theo thứ tự Z.

là tốt (tốt nhất là một cách đơn giản!) Này

Trả lời

33

Gọi GetChildIndexSetChildIndex phương pháp Controls bộ sưu tập của cha mẹ.

+1

vĩ đại - Led lạc lối bởi BringToFront() Tôi nhìn vào sai chỗ cho những phương pháp: các phương pháp của kiểm soát, không phương pháp điều khiển của cha mẹ . Cảm ơn. –

+2

không có ví dụ –

+0

Không cần ví dụ, câu trả lời tự nó là đủ! – Caverna

16

Không có thứ tự Z như trong VB, nhưng bạn có thể sử dụng các phương pháp GetChildIndexSetChildIndex để nhận và đặt chỉ mục theo cách thủ công.

Here có ví dụ về cách sử dụng. Bạn có thể sẽ cần phải giữ một bản ghi của mỗi chỉ số điều khiển mặc dù để bạn có thể thiết lập nó trở lại với nó khi nó kết thúc với.

Something như thế này có lẽ là những gì bạn đang sau:

// Get the controls index 
int zIndex = parentControl.Controls.GetChildIndex(textBox); 
// Bring it to the front 
textBox.BringToFront(); 
// Do something... 
// Then send it back again 
parentControl.Controls.SetChildIndex(textBox, zIndex); 
+2

Mọi thứ thay đổi khi bạn tự động tạo điều khiển (trong) hiển thị. Đặt 'textbox.Visible = true' và nó sẽ có chỉ số 0. Nó hoàn thành bỏ qua thứ tự từ đường viền tài liệu. Điều này đã cho tôi một thời gian để con số :) – FrankyHollywood

+0

Đã cố gắng để con số này ra quá. Nhận xét này đã giúp tôi. Cám ơn –

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