Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для .Lexx.
5 / 5 / 1
Регистрация: 06.07.2011
Сообщений: 157

Каждая кнопка должна записывать данные в свой файл

13.09.2011, 14:25. Показов 1269. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот хотел узнать:
У меня на форме куча кнопочек, каждая из которых должна уметь открывать нужный файл, а потом сохранять его.
Так вот писать для каждой кнопки код обработчик openfiledialog контрола как-то некрасиво.
Вопрос вот в чём:
как мне сделать описать 2 метода (один на открытие второй на сохранение) или же как-то можно покрасивше сделать.
один метод открывает, в зависимости от задания выполняет какой-то метод(можно ли передать как параметр(насколько я помню из книг весёлых это назывались делегаты????)) и потом закрывает.

Заранее спасибо)))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.09.2011, 14:25
Ответы с готовыми решениями:

Программа должна сортировать данные в алфавитном порядке и записывать их в файл
2.Напишите программу, которая запрашивает у пользователя имя, фамилию, дату рождения, номер группы. Программа должна сортировать данный а...

Создать массив из 7 кнопок, каждая новая кнопка должна быть больше предыдущей
Создать массив из 7 кнопок, каждая новая кнапка должна быть больше предыдущей на 10 по ширине и на 5 по высоте, создать событие клика на...

Считать данные о ноутбуках с .txt, обрабатывать их и записывать в .bin файл отсортированные данные
Добрый вечер. Пред мной поставлена задача написать программу, которая будет считывать данные о ноутбуках с файла .txt обрабатывать их и...

6
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
13.09.2011, 15:11
Можно написать один метод и привязать его к событию Button.Click для всех кнопок, а в этом методе ориентироваться на параметр sender (это и есть кнопка, на которой кликнули).
1
 Аватар для .Lexx.
5 / 5 / 1
Регистрация: 06.07.2011
Сообщений: 157
13.09.2011, 16:05  [ТС]
Спасибки, попробую)
 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.
0
 Аватар для .Lexx.
5 / 5 / 1
Регистрация: 06.07.2011
Сообщений: 157
15.09.2011, 12:02  [ТС]
Попробовал и так, и сяк и наперекосяк. Ток ничерта не получилось))
Кроме того сайт MSDN не грузится вообще.
Напишите примерный код как оно должно работать плиз.
0
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
15.09.2011, 12:12
Цитата Сообщение от .Lexx. Посмотреть сообщение
в зависимости от задания выполняет какой-то метод
От чего зависит метод, который должен выполняться? Если только от кнопки, по которой кликнули, то можно как-нибудь так:
C#
1
2
3
4
Button btn = sender as Button;
if(btn == null) return;
Action btnAction = btn.Tag as Action;
btnAction.Invoke();
И предварительно надо положить в теги кнопок нужные функции:
C#
1
btn.Tag = new Action(ButtonAction);
где ButtonAction функция вида
C#
1
2
3
void ButtonAction()
{
}
Можно и как-то по-другому связывать кнопки с действиями, например, через словарь.
1
 Аватар для .Lexx.
5 / 5 / 1
Регистрация: 06.07.2011
Сообщений: 157
15.09.2011, 12:35  [ТС]
скажем так я создал класс, в котором лежат статические методы расчётов.
На форме лежат кнопки, каждая кнопка выполняет определённый статический метод.
Получается, что для каждой кнопки(не для всех на форме, для нескольких) нужно написать обработку открытия через openfiledialog, потом вызов метода, потом сохраняем(при этом для каждой кнопки сходные принципы сохранения, но разные названия):
C#
1
2
3
4
                                newFNwithExten = Dir + "\\" + FN + "_inter_" + nom + ".txt";
                                if (File.Exists(newFNwithExten)) { File.Delete(newFNwithExten); }
                                using (StreamWriter SW = new StreamWriter(newFNwithExten))
                                { foreach (double i in arr2) { SW.WriteLine(i); } }
Фактически вопрос заключается в следующем:
возможно ли в обработчике нажатия любой кнопки просто вставить метод открывающий файл стандартно. Но чтобы была возможность в качестве параметров объявить статические методы(объявленные в другом классе), и способы сохранения итоговых файлов.
Прочитал умные книги, вроде задача похожа на создание делегатов, но чего-то у меня сплошником ошибки))

Ereona, ещё раз прочитал ваше сообщение.
1-ый код - это пишется при создании объекта кнопка(т.е. когда мы динамически создаём кнопку), правда м.б. я не прав, тогда поясните
2-ой код - это когда происходит описание свойств этой самой кнопки. Мы говорим кнопке, что при нажатии на неё она должна выполнить метод Buttonaction(имею ввиду в моём случае это будут мои методы)
3-ий код - это описание самого метода.

Ещё вопрос об чём говорят параметры в обработчике нажатия кнопки т.е. (object sender, Eventargs e)
Простите м.б. задаю глупые вопросы, но уже который день не могу подключиться к сайту MSDN.microsoft.com(ошибки роутера), сам хочу глянуть. но не могу((((
0
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
15.09.2011, 12:53
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Ага, то есть от кнопки зависит метод, который она вызывает после открытия файла и место сохранения, я правильно понимаю? Тогда тэгом не обойтись, наверно... Может быть стоит создать наследника класса Button?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyButton : Button
{
public string PathToSave{get; set;}
public void SetAction(Action btnAction)
{
    _btnAction = btnAction;
}
public void ExecuteAction()
{
    if(_btnAction != null)
        _btnAction.Invoke();
}
private Action _btnAction;
}
При создании такой кнопки нужно будет указать путь сохранения и выполняемую функцию:
C#
1
2
3
MyButton btn = new MyButton();
btn.PathToSave = "AnyPath";
btn.SetAction(new Action(ButtonAction));
Тогда обработчик клика будет выглядеть так:
C#
1
2
3
4
5
6
7
8
9
10
void ButtonClick(object sender, EventArgs e)
{
//Код с OpenFileDialog
MyButton btn = sender as MyButton;
if(btn != null)
{
    btn.ExecuteAction();
    //здесь код сохранения с параметром btn.PathToSave
}
}
sender - это объект, который вызвал событие, а в EventArgs - некоторые параметры события.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.09.2011, 12:53
Помогаю со студенческими работами здесь

Кнопка button1 должна закрывалась после последнего введённого массива, после чего должна открыться кнопка button2
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Как лучше записывать данные в файл?
Собственно интересует, что лучше и быстрее. AssigneFile и т.д. или TFileStream ?

StreamWriter перестает записывать данные в файл
Добрый День! Проблема такая, что streamWriter = new StreamWriter("Result.txt", false, System.Text.Encoding.Default); перестает...

Как правильно записывать данные в файл?
Пишу в файл построчно. Файл получается достаточно большой. Сейчас он выходит в 2 гига. А объём увеличится примерно раза в 3. И появляетсяф...

Записывать данные из нескольких Edit в файл
Необходимо в программе записывать данные из нескольких Edit в файл, в начале файла надо записать дату и время. Данные обновляются через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru