#pragma once
namespace ChooseObjects {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для Form1
///
/// Внимание! При изменении имени этого класса необходимо также изменить
/// свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
/// связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
/// конструкторы не смогут правильно работать с локализованными
/// ресурсами, сопоставленными данной форме.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
createObjects = gcnew array<bool>(5);
for (int i = 0; i < 5; i++)
createObjects = false;
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
delete[] createObjects;
}
// some auto-generated code
#pragma endregion
private:
array<bool>^ createObjects;
Form2^ chooseObjectsForm;
public:
void ApplyObjectsChoice();
private: System::Void ShowChooseObjectsButton_Click(System::Object^ sender, System::EventArgs^ e) {
chooseObjectsForm = gcnew Form2();
chooseObjectsForm->Owner = this;
chooseObjectsForm->Show();
}
};
}
C++
Как сделать чтобы локальная переменная созданная в одном блоке switch была доступна во всех файлах программы.
Никак.
Даже static'ом?
а) возможно ли физически сохранить в памяти локальную переменную для последующего доступа откуда угодно? - ответ будет "да", через static и указатели;
б) возможно ли сделать переменную, созданную внутри switch, глобальной? - нет, нельзя.
Вот смотрите мне нужно сделать консольную курсовую, делаю меню.
В одном из пунктов меню "Создать объекты классов" у меня получаеться список классов объекты которых мы можем создать.
Я хотел сделать с помощью swith чтобы создавать по выбору объекты которые нужны и потом уже использовать.
Подскажите как это можно по-другому сделать.
У вас множественный выбор, я правильно понял задачу?
Да все верно.
Ну сделайте глобальный массив выбираемых пунктов и заполняйте его из соответствующего диалога или формы. Завтра с утра набросаю пример, если нужно.
Буду весьма благодарен!
Form1.h:
Код:
Form1.cpp:
Код:
#include "stdafx.h"
#include "Form2.h"
#include "Form1.h"
using namespace ChooseObjects;
void Form1::ApplyObjectsChoice() {
Object1_Chosen->Text = chooseObjectsForm->ChooseObject1->Checked ? "Yes" : "No";
Object2_Chosen->Text = chooseObjectsForm->ChooseObject2->Checked ? "Yes" : "No";
Object3_Chosen->Text = chooseObjectsForm->ChooseObject3->Checked ? "Yes" : "No";
Object4_Chosen->Text = chooseObjectsForm->ChooseObject4->Checked ? "Yes" : "No";
Object5_Chosen->Text = chooseObjectsForm->ChooseObject5->Checked ? "Yes" : "No";
}
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;
}
#include "Form2.h"
#include "Form1.h"
using namespace ChooseObjects;
void Form1::ApplyObjectsChoice() {
Object1_Chosen->Text = chooseObjectsForm->ChooseObject1->Checked ? "Yes" : "No";
Object2_Chosen->Text = chooseObjectsForm->ChooseObject2->Checked ? "Yes" : "No";
Object3_Chosen->Text = chooseObjectsForm->ChooseObject3->Checked ? "Yes" : "No";
Object4_Chosen->Text = chooseObjectsForm->ChooseObject4->Checked ? "Yes" : "No";
Object5_Chosen->Text = chooseObjectsForm->ChooseObject5->Checked ? "Yes" : "No";
}
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;
}
(Object1_Chosen, ..., Object5_Chosen - это labels, по картинке видно)
Form2.h:
Код:
#pragma once
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace ChooseObjects {
/// <summary>
/// Сводка для Form2
///
/// Внимание! При изменении имени этого класса необходимо также изменить
/// свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
/// связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
/// конструкторы не смогут правильно работать с локализованными
/// ресурсами, сопоставленными данной форме.
/// </summary>
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form2()
{
if (components)
{
delete components;
}
}
public: System::Windows::Forms::CheckBox^ ChooseObject1;
public: System::Windows::Forms::CheckBox^ ChooseObject2;
public: System::Windows::Forms::CheckBox^ ChooseObject3;
public: System::Windows::Forms::CheckBox^ ChooseObject4;
public: System::Windows::Forms::CheckBox^ ChooseObject5;
private: System::Windows::Forms::Button^ ChooseObjectsButton;
// some more auto-generated code
#pragma endregion
private: System::Void ChooseObjectsButton_Click(System::Object^ sender, System::EventArgs^ e);
};
}
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace ChooseObjects {
/// <summary>
/// Сводка для Form2
///
/// Внимание! При изменении имени этого класса необходимо также изменить
/// свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
/// связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
/// конструкторы не смогут правильно работать с локализованными
/// ресурсами, сопоставленными данной форме.
/// </summary>
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form2()
{
if (components)
{
delete components;
}
}
public: System::Windows::Forms::CheckBox^ ChooseObject1;
public: System::Windows::Forms::CheckBox^ ChooseObject2;
public: System::Windows::Forms::CheckBox^ ChooseObject3;
public: System::Windows::Forms::CheckBox^ ChooseObject4;
public: System::Windows::Forms::CheckBox^ ChooseObject5;
private: System::Windows::Forms::Button^ ChooseObjectsButton;
// some more auto-generated code
#pragma endregion
private: System::Void ChooseObjectsButton_Click(System::Object^ sender, System::EventArgs^ e);
};
}
Form2.cpp:
Код:
#include "StdAfx.h"
#include "Form2.h"
#include "Form1.h"
using namespace ChooseObjects;
System::Void Form2::ChooseObjectsButton_Click(System::Object^ sender, System::EventArgs^ e) {
((Form1^)(this->Owner))->ApplyObjectsChoice();
this->Close();
}
#include "Form2.h"
#include "Form1.h"
using namespace ChooseObjects;
System::Void Form2::ChooseObjectsButton_Click(System::Object^ sender, System::EventArgs^ e) {
((Form1^)(this->Owner))->ApplyObjectsChoice();
this->Close();
}
Результат следующий:
[ATTACH=CONFIG]5115[/ATTACH]
Цитата: g00dv1n
Как сделать чтобы локальная переменная созданная в одном блоке switch была доступна во всех файлах программы.
Зачем?
Уж лучше бы автор продемонстрировал то, что он пытается сделать, а не надувал очередного коня.