2008-09-24 24 views
5

Có sự cố khi kiểm soát TreeView để hiển thị hình ảnh nút. Mã bên dưới hoạt động đôi khi nhưng không hiển thị bất kỳ hình ảnh nào vào các thời điểm khác..NET TreeView sẽ không hiển thị hình ảnh


private TreeNode AddNodeForCore(TreeNode root, Core c) { 
    string key = GetImageKey(c); 
    TreeNode t = root.Nodes.Add(c.Name, c.Name, key, key); 
    t.Tag = c; 
    return t; 
} 

Lưu ý rằng khi không thành công, TreeView sẽ không hiển thị bất kỳ hình ảnh nào cho bất kỳ nút nào. TreeView có một ImageList được gán cho nó, và phím hình ảnh chắc chắn là trong bộ sưu tập ảnh.

Chỉnh sửa:
Google-fu của tôi yếu. Không thể tin rằng tôi không tìm thấy câu trả lời đó.

Trả lời

8

Các bit hữu ích của bài viết google trên là trong thực tế:.

"Đây là một lỗi được biết đến trong việc thực hiện phong cách trực quan Windows XP Một số điều khiển, như ImageList, không được khởi tạo đúng khi họ đã được tạo ra trước khi ứng dụng gọi Application.EnableVisualStyles(). Việc thực hiện Main() bình thường trong C#'s Program.cs tránh được điều này. Cảm ơn bạn đã đăng lại! "

Vì vậy, về cơ bản, đảm bảo rằng Application.EnableVisualStyles() được gọi trước khi bạn khởi tạo imagelist của mình.

+0

Ah, bạn nói đúng. Đây thực sự là một thực tế thú vị hơn. – VVS

2

Một tìm kiếm google nhanh chóng tìm thấy câu trả lời này: http://forums.microsoft.com/MSDN/ShowPost.aspx?siteid=1&PostID=965968

Trích từ trang đó:

Nếu mẫu chứa TreeView được thuyết minh trong các add-in khởi động chức năng như dưới đây, các biểu tượng xuất hiện!

public partial class ThisApplication 
{ 
    Form1 frm; 

    private void ThisApplication_Startup(object sender, System.EventArgs e) 
    { 
     frm = new Form1(); 
     frm.Show(); 

    } 

NHƯNG, nếu khởi tạo với lớp, như sau:

public partial class ThisApplication 
{ 
    Form1 frm = new Form1(); 


    private void ThisApplication_Startup(object sender, System.EventArgs e) 
    { 
        frm.Show(); 

    } 

Sau đó, họ không xuất hiện. Hơn nữa, nếu "VisualStyles" (mới với XP) bị tắt, các biểu tượng hoạt động trong cả hai trường hợp.

1

Theo [phần Add phương pháp] (http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx) trong thư viện MSDN, bạn cần phải điền cả TreeView.ImageListTreeView.SelectedImageList từ các đối số thứ tư đề cập đến danh sách thứ hai.

Nếu lỗi này xảy ra khi bạn chọn một nút, sau đó lựa chọn nào tốt.

0

giải pháp đăng bởi Yossarian cũng không phải là "Application.DoEvents Gọi() giữa Application.EnableVisualStyles() và Application.Run()" phổ biến làm việc cho tôi.

Sau nhiều vùng vẫy, nghiến răng và Googling, giải pháp được đăng bởi Addy Santo đã thực hiện thủ thuật.

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