2013-02-22 30 views
5

Tôi có một hộp kết hợp mà tôi cần để phản chiếu trong một trang tab khác trong ứng dụng dựa trên C# winforms.Thay đổi văn bản của hộp tổ hợp trong một tab khác

Tôi có mã hoạt động hoàn hảo khi bạn chọn một mục khác từ danh sách thả xuống. Thật không may, tuy nhiên, khi tôi thay đổi Text của một tab chưa được nhấp vào nhưng không có gì thực sự xảy ra.

Nếu lần đầu tiên tôi nhấp vào mỗi tab thì mọi thứ hoạt động như mong đợi.

Bây giờ tôi đang đặt điều này xuống dưới một số dạng thiếu sự khởi tạo xảy ra trước tiên. Vì vậy, tôi đã cố gắng để chọn từng tab trong constructor của tôi.

tabControlDataSource.SelectedIndex = 0; 
tabControlDataSource.SelectedIndex = 1; 
// etc 

Nhưng điều này không hiệu quả.

Tôi cũng đã thử gọi tabControlDataSource.SelectTab(1) và vẫn không hoạt động.

Có ai biết cách tôi có thể buộc tab "khởi tạo" không?

+0

tôi đã từng là một vấn đề tương tự mà tôi đã giải quyết khi thực hiện 'tabControl.SelectedTab = tabControl.TabPages [" tabName "]'. Tôi không thấy cách khác với 'tabControlDataSource.SelectTab (1)' mặc dù. – Otiel

Trả lời

3

Ok, thông thường tôi đăng câu hỏi sau khi đấu tranh trong một giờ và ngay sau đó tìm giải pháp.

TabPages được khởi tạo lười biếng. Vì vậy, họ không hoàn toàn khởi tạo cho đến khi chúng được hiển thị lần đầu tiên.

Vì vậy, tôi đã thêm mã này vào constructor của tôi:

 tabControlDataSource.TabPages[0].Show(); 
     tabControlDataSource.TabPages[1].Show(); 
     tabControlDataSource.TabPages[2].Show(); 

nhưng điều này không làm việc :(

Nó xảy ra với tôi, tuy nhiên, các nhà xây dựng có thể không phải là nơi tốt nhất Vì vậy. tôi tạo ra một event handler cho Shown như sau:

private void MainForm_Shown(object sender, EventArgs e) 
    { 
     tabControlDataSource.TabPages[0].Show(); 
     tabControlDataSource.TabPages[1].Show(); 
     tabControlDataSource.TabPages[2].Show(); 
    } 

Và bây giờ tất cả mọi thứ đang làm việc

2

Có lẽ bạn cũng có thể sử dụng loại đồng bộ "lười" (khởi tạo) trong trường hợp này. Ý tưởng nhanh chóng mạnh mẽ: bộ đếm thời gian bỏ phiếu để cập nhật nội dung (sẽ cập nhật khi bạn thấy trang tab), không phụ thuộc vào tab thứ hai (không có sự kiện đã thay đổi cho combobox để cập nhật nội dung tab thứ hai, sử dụng combobox gốc từ tab đầu tiên hoặc thay vào đó là nội dung cơ bản trong thể truy cập cho cả lớp comboboxes, vv), "Reinitialization" khi tab trở nên hữu hình (mà tại đó thời điểm bạn cũng init combobox thứ hai của bạn) ...

có thể không phải là một giờ, không có cách nào = D

+1

Vâng, đã một giờ rồi, tôi đã quen với Win32 cũ hơn, nơi mà tôi không có bất cứ điều gì trừu tượng ra khỏi tôi;) – Goz