Điều khiển văn bản không cho phép chọn văn bản bằng chuột khi TopLevel = false

lập trình


Chào mọi người!

Tôi gặp sự cố với TextBoxes trong biểu mẫu của mình.

Ảnh chụp màn hình dưới dạng hình ảnh http://rghost.ru/5011999/image.png

Hãy hiển thị tình huống trên một ví dụ đơn giản.

1) Tạo dự án winforms mới với Form1;
2) Tạo Form2 mới, đặt điều khiển TextBox vào đó;
3) Hãy viết mã đơn giản tạo ra dạng không theo phương thức;

TRUNG
Form frm = new Form();
frm.StartPosition = FormStartPosition.CenterParent;
frm.TopLevel = false; // here is the problem
frm.Parent = this;
frm.Show();
frm.BringToFront();

Khi bạn thực thi mã này, biểu mẫu có hộp văn bản sẽ xuất hiện.
Nhập nội dung nào đó vào hộp văn bản, ví dụ: “đây là bài kiểm tra”. Bây giờ, hãy thử chọn một phần hoặc toàn bộ văn bản bằng chuột – bạn không thể, vì nó không hoạt động.

Có, bạn có thể chọn toàn bộ văn bản bằng cách nhấp đúp, nhưng sau đó bạn không thể bỏ chọn nó. Ngoài ra, nếu bạn chỉ cần chọn một phần văn bản để xóa nó thì sao?!

Khi biểu mẫu ở dạng phương thức, mọi thứ đều hoạt động tốt.

Tình huống tương tự đối với Bản ghi nhớ và tôi cho rằng đối với một số điều khiển văn bản khác.

Tất cả những điều này tôi cần vì chúng tôi sử dụng dự án MDI nghiêm túc và bên trong mỗi biểu mẫu MDI, người dùng có thể mở các biểu mẫu khác nhau (ví dụ: biểu mẫu tìm kiếm). Tất nhiên, chúng tôi có thể biến chúng thành phương thức, nhưng đây sẽ không phải là MDI thực sự kể từ thời điểm đó.

Bạn có ý kiến ​​gì không?

Giải pháp 3

Thay thế Parent với MdiParent:

Form2 frm = new Form2();
frm.StartPosition = FormStartPosition.CenterParent;
frm.TopLevel = false;
frm.MdiParent = this;
frm.Show();
frm.BringToFront();

Và đảm bảo biểu mẫu chính của bạn có IsMdiContainer được đặt thành đúng.

—————

Đừng đổ lỗi cho chúng tôi vì bạn đã không giải thích rõ ràng vấn đề của mình:
Nếu tôi hiểu rõ ý kiến ​​​​của bạn thì bạn có 3 hình thức:
1- MainForm với IsMdiContainer đặt thành đúng
2- ChildForm với MdiParent đặt thành MainForm

3- AnotherChildForm. Và bạn muốn cái này là con của ChildForm.

Nếu điều này đúng thì bạn không thể thoát khỏi lỗi. Để loại bỏ lỗi ChildForm nên là cả hai MdiContainer MdiChild điều đó là không thể. Bạn phải biến dạng thứ 3 thành con của MainFormhoặc không sử dụng biểu mẫu (có thể là UserControl hoặc một cái gì đó).

Giải pháp 1

Đầu tiên, bạn đang cố gắng đạt được điều gì bằng cách thiết lập TopLevel ĐẾN false? Và tại sao bạn lại gọi BringToFront()? Khi bạn tạo một biểu mẫu không có chế độ, nó sẽ tự động hiển thị (nó được đưa lên phía trước).

Thứ hai, có vẻ như bạn chưa hiểu rõ bản chất của ứng dụng MDI cũng như mối quan hệ qua lại giữa cửa sổ con và các dạng khác.

Thứ ba, nếu bạn đang tạo một cửa sổ không có chế độ, bạn nên thực hiện như thế này:

C#
public partial class MyForm
{
    MyModelessForm m_modelessForm = null;

    private void ShowModelessForm()
    {
        if (m_modelessForm == null)
        {
            m_modelessForm = new ModelessForm();
            // configure the form here if necessary
        }
        m_modelessForm.Show();
        m_modelessForm.BringToFront();
    }
}

Giải pháp 2

Giả sử bạn đặt thuộc tính IsMdiContainer của Form1 thành true, mã của bạn sẽ đọc như thế này:

Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();

Giải pháp 4

Hãy thử đặt thuộc tính FormBorderStyle của biểu mẫu con thành ‘none’

コメント

タイトルとURLをコピーしました