Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2012, 17:19   #1
Ольга790
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию запись в файл с формы

Привет. создала на форме 15 кнопок chackBox. в них я долна написать название песен и при нажатие на какой то из них у меня название песни должно записываться в файл. не подскажете как это сделать?

Последний раз редактировалось Ольга790; 22.12.2012 в 17:26. Причина: недописала
Ольга790 вне форума Ответить с цитированием
Старый 22.12.2012, 20:18   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

С++ - это хардкор. На дельфях все примитивно:

Где-то там сперва присваиваются глобальные переменные strSong и strFileName, и пишутся три строчки кода. Удобно!
(пусть и быдло-код, но работает, а больше и не надо)

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(strSong);
Memo1.Lines.SaveToFile(strFileName) ;
end;
Smogg вне форума Ответить с цитированием
Старый 23.12.2012, 09:50   #3
Ольга790
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию

я к сожалению,не поняла тот код который вы написали, может подскажете как реализовать, то что я написала ниже
Код:
private: System::Void checkBox1_Click(System::Object^ sender, System::EventArgs^ e)
 {if (checkBox1->Checked)
 {
 integerList.insertAtBack(k1);
 a1=true;

 }
 else
 if (a1)
 {
 integerList.remove (k1);
 a1=false;
 } 
 }
это я сделала для одной кнопки переменная k1 приравнена 1, к15=15, я думала может сделать через switch(){}
но пока не погу понять куда этот код засунуть

Последний раз редактировалось Stilet; 23.12.2012 в 11:20.
Ольга790 вне форума Ответить с цитированием
Старый 23.12.2012, 11:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю описать вот такой обработчик:
Код:
	private: System::Void checkBox1_CheckedChanged(System::Object^  sender, System::EventArgs^  e) {
				System::String^ s=((System::Windows::Forms::CheckBox^)sender)->Text;
				StreamWriter^ sw = gcnew StreamWriter("d:\\1\\file.txt");
				sw->Write(s);
				sw->Close();
			 }
Каждому чекбоксу его указать в качестве основного на клик.
Тогда создаваемый файл будет содержать текст кликнутого контрола.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2012, 00:20   #5
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Ольга790
Если Вам программа нужна для дела, то сперва опишите ее логику работы в "псевдо-коде". Все сразу станет яснее. Сумеете сформулировать четкие вопросы, на которые уже здесь получить конкретные работающие ответы.

Пока я вижу Вашу программу следующим образом:

Есть форма. На ней есть 15 полей текста, рядом с каждым из которых есть чекбокс. Еще внизу есть кнопка "Записать выбранные песни".
Итого на форме 31 элемент: 15 +15 + 1.

При нажатии на кнопку активируется функция, которая последовательно проверяет состояние чекбоксов, и если true, то пишет название песни в один и тот же файл. По ее завершении получим файл с выбранными песнями.

Так?
Smogg вне форума Ответить с цитированием
Старый 24.12.2012, 01:23   #6
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

private: System::Void checkBox1_CheckedChanged(System::Ob ject^ sender, System::EventArgs^ e)
private: - модификатор доступа, позволено обращаться всем
System:: - пространство имен или исходный класс?
Void - возвращаемое значение
checkBox1_CheckedChanged - имя функции, нижнее подчеркивание ничего не разделяет, а просто для понятливости. Функцию можно назвать и func1.
Дальше идут аргументы:
System:: - то же не понимаю, пространство имен или исходный класс?
Object - точно родительский класс где-то там в самом начале иерархии наследования.
sender - либо указатель, либо скопированный блок данных, что врядли
System:: - нипанятна
EventArgs - получается тоже родительский класс?
е - указатель на объект класса EventArgs, производного от System?

System::String^ s=

Теперь объявляется указатель на объект класса String, произведенного от System. И этому указателю сразу при создании что-то присваивается.
Дальше идет нечто жуткое...
((System::Windows::Forms::CheckBox^ )sender)
указатель sender приводится к типу (System::Windows::Forms::CheckBox^)...
Неужели каждый раз, чтобы достучаться до объекта, надо прописывать
полную иерархию за ради избегания конфликтов имен?
Но это ж основные, а не самописные классы.*/
sender)->Text;
и лишь после этой всей подготовки указателю s присваивается свойство Text,
который сам по себе я вляется указателемна на объект класса System::String
StreamWriter^ sw = gcnew StreamWriter("d:\\1\\file.txt");
Ну, это уже понятно. Создается обхект Stream Writer, вызывая конструктор с аргументом "d:\\1\\file.txt".
sw->Write(s);
Вызывается его метод Write(), который на самом деле не единственен, а выбирается из списка перегруженных Write(),
в зависимости от типа данных s.
sw->Close();
И уничтожается, вызывая деструктор Close()

Так... после пошагового описания что-то прояснилось.
Но конструкция System::Object^ sender, все равно смущает.
Что это такое, в двух предложениях?
Smogg вне форума Ответить с цитированием
Старый 24.12.2012, 02:52   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
System:: - пространство имен или исходный класс?
это уже основы С++.
пространство имен System, класс Void, Object, EventArgs.

это С++ CLR, иначе говоря С++ для dotNET, нечто среднее между шарпом и С++.
^ символ ссылки на управляюмую кучу.
Цитата:
Неужели каждый раз, чтобы достучаться до объекта, надо прописывать
полную иерархию за ради избегания конфликтов имен?
using никто не отменял.
но Виталий не стал на них расчитывать.(хотя со StreamWriter почему то иначе поступил, там System::IO::StreamWriter)
Цитата:
И уничтожается, вызывая деструктор Close()
нет, у управляемых обьектов нельзя явно вызвать деструктор, уничтожение обьекта произойдет во время сборки мусора.
данный же метод закрывает файловый поток, иначе придется ждать сборки мусора, что не комильфо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.12.2012, 03:45   #8
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Ага, спасибо.
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в файл с формы Red_Garry Общие вопросы Delphi 4 11.07.2011 09:47
запись из формы в php файл tresh PHP 9 16.05.2011 21:49
Запись данных в БД c формы insense БД в Delphi 6 17.06.2010 09:56
Запись параметров формы в БД PSix1_73 JavaScript, Ajax 3 21.05.2009 17:59