2011-12-15 38 views
20

Tôi có câu hỏi liên quan đến lỗi trên tiêu đề. Tôi đang làm việc với C# và Visual Studio 2010.Biến 'variable_name' không được khai báo hoặc chưa bao giờ được gán.

Tôi có một biểu mẫu được khai báo là "dạng công khai FormularioGeneral: Form", là cơ sở cho các mẫu còn lại trong đơn của tôi. Khi tôi cố gắng truy cập vào Chế độ xem thiết kế, tôi nhận được lỗi này nhiều lần, như bạn có thể thấy trong hình ảnh:

Sample of errors Tất cả các dòng tham chiếu lỗi trong phương thức InitializeComponent, trong đó giá trị được gán cho thuộc tính như thế này :

[...]    
this.PanelMargenIzquierdoCapaBase.BackColor = m_ColorCapaBase; 
[...] 

Nhưng tất cả các biến được khai báo trong cùng một lớp với thuộc tính chỉ đọc và tất cả các biến được chỉ định bên trong phương thức được gọi trong hàm tạo.

Tuyên bố tài sản:

protected Color m_VariableName; 
    public Color VariableName 
    { 
     get { return m_VariableName; } 
     set { } 
    } 

đang thi công: Phương pháp

public FormularioGeneral() 
    { 
     ConfigurarUI(); 
     AccionesConstructor(); 
     InitializeComponent(); 
     PostInicializacionComponentes(); 
     EstablecerIcono(); 
     InicializarLocalizacionFormulario(); 
    } 

ConfigurarUI:

public virtual void ConfigurarUI() 
{ 
     [...] 

     m_AltoBordeSuperiorCapaBase = 30; 
     m_AltoBordeInferiorCapaBase = 7; 
     m_AnchoBordesLateralesCapaBase = 7; 

     m_ColorCapaBase = Color.FromArgb(50, 100, 150); 
     m_ColorTextoCapaBase = Color.White; 
     m_ColorTextoBotonAplicacion = Color.Black; 

     m_FuenteTextoIzquierdoCapaBase = new System.Drawing.Font("Verdana", 11.0F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
     m_FuenteTextoCentroCapaBase = new System.Drawing.Font("Verdana", 14.0F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
     [...] 
} 

Vì vậy, theo như tôi biết, tất cả các biến được đưa ra lỗi được khai báo chính xác và có giá trị được gán trước khi hàm InitilizeComponent được gọi.

Im bị kẹt vào thời điểm này và không biết phải làm gì để giải quyết vấn đề. Hy vọng một số bạn có thể giúp tôi về vấn đề này: D

Cảm ơn tất cả! T

+0

đảm bảo bạn gọi hàm tạo của mình trước khi sử dụng mã. Biểu mẫu công khai1() { FormularioGeneral(); } – Moonlight

+0

Xin chào Bruno. Lỗi được tạo bên trong phương thức InitializeComponent, khi tôi gán giá trị m_ * cho một số thuộc tính (ví dụ, khi tôi đặt màu văn bản của một nút -> this.Button1.ForeColor = m_TextButtonColor) – Kitinz

+0

cũng được thảo luận tại đây: http : //stackoverflow.com/questions/1915183/got-error-the-variable-variable-name-is-either-undeclared-or-was-never-assigne – Christian

Trả lời

7

Có thể lỗi xảy ra do mã trình xây dựng của bạn. Đặt InitializeComponent(); vào đầu các nhà xây dựng như thế này:

public FormularioGeneral()  
{   
    InitializeComponent(); 
    ConfigurarUI();   
    AccionesConstructor(); 
    PostInicializacionComponentes();   
    EstablecerIcono();   
    InicializarLocalizacionFormulario();  
} 

Giải thích:

Các biến được khởi tạo trong phương pháp đó.

+0

Tôi đã thử nó, nhưng điều này không giải quyết được vấn đề. Dù sao, các biến được khai báo không có giá trị. Giá trị được gán bên trong phương thức "ConfigurarUI" (Vì vậy, phương thức này nên được thực hiện trước khi sử dụng biến). Cuối cùng, trong InitializeComponent các biến được sử dụng. – Kitinz

+0

Theo như tôi hiểu bạn một cách chính xác, bạn đã thay đổi mã trong 'InitializeComponent' để sử dụng các biến của bạn? – Fischermaen

+0

Tôi không nghĩ rằng các bài tập được "hardcoded" trong InitializeComponent vì nó được tự động tạo ra mỗi khi bạn biên dịch. Tôi giả định rằng các giá trị đã được chỉ định thông qua các nhà thiết kế, nhưng không thể đảm bảo nó kể từ khi anh chàng khác bắt đầu dự án này và im "sucessor": P – Kitinz

1

Giới thiệu về các biến, bạn có thể đơn giản khởi tạo chúng trong khai báo không? Tôi nghĩ rằng sẽ đủ, ngay cả khi bạn thay đổi giá trị sau đó. Từ những gì tôi thấy, trình biên dịch không thể kiểm tra xem bạn đã khởi tạo chúng hay không vì nó không trực tiếp trên mã của hàm tạo, nó đang được thực hiện trên một phương thức ảo sẽ chỉ đánh giá khi chạy.

Vì vậy, thay vì:

protected Color m_VariableName; 
public Color VariableName 
{ 
    get { return m_VariableName; } 
    set { } 
} 

Đỗ:

protected Color m_VariableName = Color.White; // Or null 
public Color VariableName 
{ 
    get { return m_VariableName; } 
    set { } 
} 

Và một lời nhận xét: bạn nên tránh các cuộc gọi ảo trong các nhà xây dựng, có thể dẫn đến sai sót khó hiểu trong ứng dụng của bạn. Kiểm tra nó here.

+0

Cảm ơn câu trả lời. Tôi đã cố gắng làm như bạn nói, khởi tạo các biến trong khai báo, nhưng không giải quyết được vấn đề: P Tôi cũng đọc về các phương thức ảo và sao chép tất cả mã trong phương thức ảo bên trong hàm tạo, không cần phải thực hiện cuộc gọi, nhưng ngay cả như vậy, vấn đề vẫn tồn tại: P – Kitinz

22

Vì vậy, tôi muốn cùng một vấn đề, cho sửa chữa tôi đã làm:

  • Solution -> Giải pháp sạch;
  • Build-> Rebuild Solution;
  • Đóng Visual Studio, mở lại.

Cảm ơn rất nhiều để Marshall Belew!

+1

Tôi làm điều đó, và nó hoạt động, nhưng tôi tự hỏi tại sao lỗi này xảy ra và làm cách nào tôi có thể tránh được điều đó. Hoặc đây là một lỗi VS đơn giản? – Pedro77

+1

Trong trường hợp ai đó tìm đường đến đây, sự cố có thể phát sinh từ hàm tạo của điều khiển vi phạm được khai báo bất kỳ điều gì khác ngoài 'công khai'. – Lara

+0

Đó là giải pháp 'sạch', không phải' xóa'. – Zero

1

tôi đã cùng một vấn đề và làm sạch và xây dựng lại không làm việc cho tôi.

Trong trường hợp của tôi, sự cố do trình thiết kế Visual Studio tải DLL tham chiếu từ GAC thay vì tải chúng từ thư mục <HintPath> được chỉ định trong tệp .csproj. Các DLL trong GAC không có cùng phiên bản với các DLL được lưu trữ cục bộ.

Khi tôi cập nhật các tệp DLL trong GAC để có cùng phiên bản, mọi thứ hoạt động OK một lần nữa.

1

Lỗi này xảy ra đối với tôi trong khi tạo điều khiển bên thứ ba trong InitializeComponent() được gọi từ hàm tạo biểu mẫu. Khi tôi tạo nó sau khi InitializeComponent() nó hoạt động tốt cho tôi.

public MyForm() //Form constructor 
{   
    InitializeComponent(); 

    //Create/initialize third party control here with new operator  
} 
+0

Đây chính là vấn đề của tôi, tôi đã tạo ra một số UserControl, và vì một lý do nào đó, quá trình tạo ra Thiết kế Biểu mẫu luôn phàn nàn. Sau khi tôi di chuyển bất cứ điều gì có vẻ đáng ngờ ra khỏi InitializeComponent, nó hoạt động tốt. Cảm ơn –

5

Tôi gặp lỗi này vì dự án của tôi chỉ là x64. Rõ ràng Visual Studio, là một ứng dụng 32 bit, không thể tải bất kỳ biểu mẫu hoặc điều khiển nào được biên dịch thành 64 bit trong trình thiết kế. Nó có ý nghĩa tổng thể, nhưng lỗi cho bạn không có dấu hiệu nào là vấn đề.

Xem the answer đến Visual studio designer in x64 doesn't work.

Cách giải quyết là thay đổi dự án của bạn thành CPU bất kỳ khi thiết kế, sau đó quay lại khi xây dựng.

+0

Quá tệ ngay cả trong studio trực quan 2017 họ vẫn không nói lý do thực sự ... 2 giờ trên web, sau khi thử thay đổi GUI theo cách thủ công ... tất cả cho đến khi tôi đến đây ... – ephraim

1

Tôi đang làm việc với WPF bên trong Windows Forms.

Tôi đã lưu trữ Điều khiển người dùng WPF của mình trong Máy chủ lưu trữ phần tử biểu mẫu Windows. Do đó khi InitializeComponent() được gọi là I execute Code trước khi đạt đến InitializeComponent() của điều khiển WPF của tôi. Khôn lanh.

Vì vậy, tôi đã chuyển nó ra khỏi nhà xây dựng của mình, Xây dựng sạch, Xây dựng lại, Khởi động lại VS và mọi thứ hoạt động như mong đợi. Cuối cùng.

1

Tôi gặp sự cố này khi kiểm soát người dùng của mình có một số mã trong hàm dựng có liên quan đến tài nguyên thời gian chạy. Tôi thêm kiểm tra null và nó cố định.

 InitializeComponent(); 
     if (MyConfig!= null) 
     { 
      this.label2.Text = MyConfig.text1; 
      this.label3.Text = MyConfig.text2; 
      this.label1.Text = MyConfig.text3; 
     } 
0

Trong trường hợp của tôi, tôi thêm điều khiển bên thứ ba vào Thanh công cụ (qua tệp .dll) và vẽ một trong số đó trong biểu mẫu của tôi. Và vì lý do nào đó, Thanh công cụ của tôi sẽ kiểm soát bên thứ ba này khỏi nhóm chung (tôi đã thêm nó vào nhóm chung), vì vậy VS không thể tìm thấy điều khiển này. Đây là những gì tôi đã thực hiện để giải quyết vấn đề này:

  1. Thêm điều khiển này vào Thanh công cụ.
  2. sạch giải pháp
  3. Rebuild giải pháp

Vẽ lại sự kiểm soát nếu cần thiết.

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