2012-06-16 3 views
0

Мне нужно изменить свойство testAppGUI (testAppGUI является формой) видимым из другой функции. Функция находится в отдельном файле и не находится в классе.Изменить вид «видимого» свойства из другой функции?

Если я пытаюсь сделать

testAppGUI::Visible = false; 

Я просто получаю ошибку

C2597: нелегальная ссылка на нестатической член 'System :: Windows, :: Forms :: Управление :: Видимые'

И если я пытаюсь создать экземпляр объекта, как это

testAppGUI^ formProperty = gcnew testAppGUI; 

, а затем сделать

formProperty->Visible = false; nothing happens?! 

Может кто-нибудь объяснить, как это сделать?

Заранее спасибо.

EDIT: Вот еще код

В testApp.cpp

#include "stdafx.h" 
#include "testAppGUI.h" 

using namespace testApp; 

[STAThreadAttribute] 
int main(array<System::String ^> ^args) 
{ 
    Application::EnableVisualStyles(); 
    Application::SetCompatibleTextRenderingDefault(false); 
    Application::Run(gcnew testAppGUI()); 
    return 0; 
} 

В testAppGUI.h

#pragma once 

#include "HideAndShowGUI.h" 

namespace testApp { 

    using namespace System; 
    using namespace System::ComponentModel; 
    using namespace System::Collections; 
    using namespace System::Windows::Forms; 
    using namespace System::Data; 
    using namespace System::Drawing; 
    using namespace System::IO; 

    public ref class testAppGUI : public System::Windows::Forms::Form 
    { 

    public: 
     testAppGUI(void) 
     { 
      InitializeComponent(); 
     } 

    protected: 
     ~testAppGUI() 
     { 
      if (components) 
      { 
       delete components; 
      } 
     } 
    private: System::Windows::Forms::Button^ button1; 
    ... 

#pragma region Windows Form Designer generated code 
     void InitializeComponent(void) 
     { 
      ... 

     } 
#pragma endregion 

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
      hideGUI(); 
     } 
}; 
} 

HideAndShowGUI.cpp

#include "stdafx.h" 

#include "testAppGUI.h" 

using namespace testApp; 

void hideGUI(){ 
    //Hide the form, this function should be able to be called by all functions in the program. Not just from forms! 

} 

void showGUI(){ 
    //Unhide/Show the form, this function should be able to be called by all functions in the program. Not just from forms! 

} 

hideGUI и showGUI объявляется в HideAndShowGUI.h

ответ

2

Если у вас уже есть экземпляр формы, которую вы хотите скрыть, вам нужно будет передать ссылку на эту форму функции, в которой вы хотите изменить свойство.

Вы можете сделать это, напрямую передав форму в качестве параметра функции, или если функция является членом класса, вы можете передать форму в (и экземпляр) класса (и сохранить его как переменная-член). Какой из них более подходит для вас, зависит от вашего конкретного контекста, к которому у нас нет доступа без какого-либо вашего кода.

Примечание: Ваш первый снайпер противоречит вашему второму: в первом вы используете form1 в качестве переменной, во втором качестве типа. Если у вас уже есть переменная form1, вы можете просто установить ее свойство:

form1->Visible = false; 
+0

Подробнее как это сделать? Можете ли вы отправить мне ссылку, которая объясняет, как это сделать? Или вы можете объяснить? – HalfEvil

+0

@ HalfEvil, пожалуйста, укажите больше кода. Что такое form1, как, где вы пытаетесь «form1 :: Visible = false;» from? – earlNameless

+0

Я предоставил больше кода сейчас :) – HalfEvil

Смежные вопросы