Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 5

Форма и Текстовый документ

05.04.2011, 12:20. Показов 2228. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Есть небольшой вопрос как из текстового документа, например:
Вопрос1: Какого цвета трава?
А. Зелёного
Б. Синего
В. Красного
Г. Жёлтого

Присвоить значения элементам формы. Нужно чтобы вопрос был в лэйбле, а варианты в радиобуттонах.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2011, 12:20
Ответы с готовыми решениями:

Дозапись в текстовый документ
Записываю таким образом: StreamWriter sw = new StreamWriter(savepath, false, Encoding.Unicode); ...

Сохранение в текстовый документ
Сохраняю в текстовый документ (.txt). На консоль выводится как надо, каждый элемент в новой строке, в документе все в одну строку. Не могу...

Запись в текстовый документ
Дан массив чисел int numbers = { 123, 1312, 324, 87, -312, -6532, -3123123 }; Можно ли его записать в текстовый документ без...

13
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
05.04.2011, 12:59
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            using System.IO;
            .....................................................................
            StreamReader sr = new StreamReader(@"test1.tst");
            string temp;
            int i=0;
            while ((temp = sr.ReadLine()) != null)
            {
                if (i % 5 == 0) //если в каждом вопросе 4 варианта ответов
                {
                    Label lb = new Label();
                    lb.Text = temp;
                    //разные св-ва(высота ширина итп).......
                    this.Controls.Add(lb);
                }
                else
                {
                    RadioButton rb1=new RadioButton();
                    //разные св-ва(высота ширина итп).......
                    rb1.Text=temp;
                    this.Controls.Add(lb);
                }
                i++;
            }
а еще есть ini файлы, я думаю с ними вам будет очень легко и о многом не надо будет парится.Для них надо использовать WinApi функции
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        using System.Runtime.InteropServices;
        //для чтения
        [DllImport("kernel32.dll")]
        static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName,
        string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
        //для записи
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName,
        string lpString, string lpFileName);
 
        StringBuilder sb = new StringBuilder(100);
        uint temp=GetPrivateProfileString("Vopros1","otv1","ответ/вопрос не найден",sb,sb.Capacity,Path.GetDirectoryName(Application.ExecutablePath) + "\\test.tst");
        label1.Text=sb.ToString();
что то типа этого, на самом деле, может показаться немного страшным, но ini очень удобная штука
1
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 5
05.04.2011, 13:47  [ТС]
Спасибо, буду пробовать.
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
05.04.2011, 15:00
zelen, а разве в ini нельзя писать стандартными методами msdn и обязательно использовать WinApi функции?
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
05.04.2011, 18:57
я о них не знаю, напишите какими если знаете, буду признателен...
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
05.04.2011, 23:19
C#
1
2
3
            using (StreamWriter sw = new StreamWriter(new FileStream(@"d:\file.ini", FileMode.OpenOrCreate, FileAccess.Write))) {
                sw.WriteLine("some options");
            }
или я вас неверно понял?
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
06.04.2011, 00:05
да, я имел ввиду немного другое, конечно можно так писать, но функциональность ini файла при этом не используется. Просто при помощи WritePrivateProfileString, можно задать значения именно определенному параметру, указанного ключа и отпадает необходимость пользоваться Seek, что существенно упрощает работу, а так же объем кода, так как при помощи вышеупомянутого метода произвести запись можно в одну строку, и что самое главное одним методом (PS. Я в том смысле что в одну строку впринципе при большом желании можно наваять хоть пол курсовой)
0
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 5
07.04.2011, 10:02  [ТС]
Сделал как написано в первом примере, там он добавляет только лэйбл и то вопрос не до конца, а радиобуттонов нет
Миниатюры
Форма и Текстовый документ  
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
08.04.2011, 00:32
RadioButton не добавляет так как вместо this.Controls.Add(lb1); надо this.Controls.Add(rb1);
C#
1
2
3
4
5
6
7
else
{
    RadioButton rb1=new RadioButton();
    //разные св-ва(высота ширина итп).......
    rb1.Text=temp;
    this.Controls.Add(rb1);
}
Во вторых в чем может быть проблема....в Top и Left, вы просто не видите добавленные элементы
вот код он 100% добавляет, не красиво, но все равно добавляет
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
            StreamReader sr = new StreamReader(@"test1.tst");
            string temp;
            int i = 0;
            while ((temp = sr.ReadLine()) != null)
            {
                if (i % 5 == 0) //если в каждом вопросе 4 варианта ответов
                {
                    Label lb = new Label();
                    lb.Height = 12;
                    lb.BackColor = Color.Transparent;
                    lb.Text = temp;
                    lb.Top = i * 20+20;
                    lb.Left = 10;
                    this.Controls.Add(lb);
                }
                else
                {
                    RadioButton rb1 = new RadioButton();
                    rb1.BackColor = Color.Transparent;
                    rb1.Top=i * 20 + 10;
                    rb1.Left = 10;
                    rb1.Text = temp;
                    this.Controls.Add(rb1);
                }
                i++;
            }
Так что засядьте как то и проверяйте значения положения label и RadioButton...или уж на крайний случай дайте код и посмотрим что не так..
И еще если вы собираетесь все вопросы выдавать сразу, то используйте компонент GroupBox иначе будут проблемы с RadioButton, увидите какие когда по нажимаете на них и посмотрите что получается
1
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
08.04.2011, 01:29
господа, я тут просматриваю как живут разные темы и эта в том числе
мне кажется что zelen (простите, ничего личного, и не примите за неуважение к вашей персоне) не в ту сторону рассказывает.
как по мне было бы проще сходу создать:
1. лейбл;
2. 4 радиоБаттона (далее рБ);
3. кнопку для следующего вопроса.

при загрузке формы наши рБ и лейбл невидимы и забрасываем вопрос-ответы-верныйОтвет в какие-то структуры для временного хранения (будь-то типизированный список, будь-то просто массив - это неважно, главное чтобы потом оттуда было легко доставать информацию).
далее по первому нажатию на кнопочку мы показываем лейбл и рБ а также в текст лейбла подставляем вопрос и в рБ варианты ответа.
следующий клац на кнопочку - мы считываем выбранный ответ в какую-то структуру (в любую, с какой удобно было бы работать) и производим операцию со следующим вопросом (текст вопроса в лейбл, варианты в рБ).
и так далее...
по окончанию всего опросы мы имеем ответы и правильные ответы - считаем баллы по нужной схеме.
лично я сделал бы таким образом.
1
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
08.04.2011, 01:56
Я за то, что бы брали ту информацию которая им полезна и уже при помощи фантазии лепили именно то, что хотят они...я просто показал как можно засунуть информацию в RB и LB, ну и за одно вкратце как динамически создавать объекты, вдруг покажется полезным..Конечно при этом появляются множество проблем таких как +=new EventHandler(RB_CheckedChanged); итп. Но это собственно не важно...Я бы тоже делал не совсем этим способом
0
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 5
08.04.2011, 18:59  [ТС]
Спасибо за ответы, Koran я с самого начала вроде говорил, что надо лейбл и 4 рб для вариантов. И с this.Controls.Add(lb1) проблем не было исправил сразу.

.Я бы тоже делал не совсем этим способом
Не могли бы поподробнее??
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.04.2011, 23:18
Вообще можно сделать уймой вариантов. От простого, чтения 5-ти строк по порядку и присвоения radioButon'ам значений. Всё зависит от целей. Да и формат файла определить желательно.
То есть, например первый вопрос это первая строка в файле. За ним 4 варианта ответа. Потом строка разделитель (по любому константа) и за ним опять вопрос с 4-мя вариантами ответов. Тут можно написать простой парсинг файла.

Можно сделать, что первая строка это первый вопрос, за ним каждая строка это вариант ответа, строка разделитель это разделитель вопросов с ответами. То есть вариантов ответов может быть сколько угодно, то тут можно написать другой парсинг. Почему не использовать тот же xml?
Можно ещё что-то придумать.

Вот как вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WinForms_TestProgram
{
    public partial class FormVariant1 : Form
    {
        String txtFile;
        const String nextQuestionSeparator = "***";
        List<TestQuestion> testQuestions = new List<TestQuestion>();
 
        public FormVariant1()
        {
            InitializeComponent();
            //Создаём файл. Просто для удобства, чтобы не заморачиваться с его существованием,
            //вложением в папку с программой или куда нибудь ещё...
            if (!File.Exists(txtFile))
            {
                txtFile = Path.Combine(Environment.GetFolderPath(
                    Environment.SpecialFolder.DesktopDirectory), "Testing.txt");
 
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Вопрос1: Какого цвета трава?");
                sb.AppendLine("А. Зелёного");
                sb.AppendLine("Б. Синего");
                sb.AppendLine("В. Красного");
                sb.AppendLine("Г. Жёлтого");
                #region .............
                sb.AppendLine(nextQuestionSeparator);
                sb.AppendLine("Вопрос 2: Какого цвета снег?");
                sb.AppendLine("А. Жёлтого");
                sb.AppendLine("Б. Красного");
                sb.AppendLine("В. Белого");
                sb.AppendLine(nextQuestionSeparator);
                sb.AppendLine("Вопрос 3: Какого цвета безоблачное небо в солнечный день?");
                sb.AppendLine("А. Красного");
                sb.AppendLine("Б. Жёлтого");
                sb.AppendLine("В. Оранжевого");
                sb.AppendLine("Г. Голубого");
                sb.AppendLine("Д. Зелёного");
                #endregion
 
                using (Stream fs = new FileStream(txtFile, FileMode.Create))
                {
                    using (TextWriter textWriter = new StreamWriter(fs))
                    {
                        textWriter.Write(sb.ToString());
                    }
                }
            }
            //======== Конец создания файла ========
 
            //Так как нужно по вопросу было, чтение, то всё делаем так, как будто кода выше нету.
            //А на рабочем столе находится уже готовый текстовый файл.
            if (File.Exists(txtFile))
            {
                using (Stream fs = new FileStream(txtFile, FileMode.Open))
                {
                    using (TextReader textReader = new StreamReader(fs))
                    {
                        String textFromFile = textReader.ReadToEnd();
                        String[] linesQuestionsBlocks = textFromFile.Split(
                            new string[] { nextQuestionSeparator }, StringSplitOptions.RemoveEmptyEntries);
 
                        for (int i = 0; i < linesQuestionsBlocks.Length; i++)
                        {
                            String[] lines = linesQuestionsBlocks[i].Split(
                                new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                            TestQuestion question = new TestQuestion(lines[0], lines.Skip<String>(1).ToArray<String>());
                            testQuestions.Add(question);
                        }
                    }
                }
            }
        }
    }
}
Класс TestQuestion:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
 
namespace WinForms_TestProgram
{
    /// <summary>Класс представляет вопрос с вариантами ответов</summary>
    internal sealed class TestQuestion
    {
        /// <summary>Вопрос</summary>
        public String Question { get; private set; }
        /// <summary>Варианты ответов</summary>
        public List<String> Answers { get; private set; }
 
        /// <summary>
        /// Конструктор класса
        /// </summary>
        /// <param name="Question">Вопрос</param>
        /// <param name="Answers">Варианты ответов</param>
        public TestQuestion(String Question, String[] Answers)
        {
            this.Question = Question;
            this.Answers = new List<String>(Answers.Length);
            this.Answers.AddRange(Answers);
        }
    }
}
Поясню. По окончании выполнения этого кода у нас будет Список вопросов с ответами testQuestions. Дальше уже можно использовать экземпляры класса TestQuestion для заполнения окна.

Добавлено через 13 минут
Цитата Сообщение от TUWATCHER Посмотреть сообщение
Присвоить значения элементам формы. Нужно чтобы вопрос был в лэйбле, а варианты в радиобуттонах.
Тут я не в курсе, как у вас называются эти самые элементы на форме. А если делать по своему, то можно выкладывать весь проект, чтобы не возникало вопросов. А динамически создавать конечно можно, но я не стал заморачиваться. Могу выложить этот проект с заполнением элементов формы (его тогда надо будет дописать, просто сомнение есть, что это нужно вообще сюда выкладывать).

А-а-а, кстати. Если заполнять готовые элементы на форме, то нужно постоянно число вариантов ответов. Хотя и тут есть выход... (не используя динамическое создание)
1
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 5
15.04.2011, 14:08  [ТС]
Ещё вопрос как к тем же объектам формы присвоить значения из XML. Пример XML
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version = "1.0" encoding="windows-1251"?>
<test>
 
<questions>
 
    <quest>Какого цвета трава?
    <answera>Зелёного</answera>
    <answerb>Синего</answerb>
    <answerc>Жёлтого</answerc>
    <answerd>Красного</answerd>
        <trueanswer>Зелёного</trueanswer></quest>
</questions>
 
</test>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2011, 14:08
Помогаю со студенческими работами здесь

Вывод матрицы в текстовый документ
Добрый вечер, господа знатоки. Подскажите пожалуйста как можно вывести матрицу в txt файлик не в строку? С выводом матрицы в строку...

Запись массива в текстовый документ
Дан массив строк string stings = { &quot;Hello&quot;, &quot;world&quot;, &quot;1234&quot; }; Как записать его в текстовый документ (.txt) Документ необходимо...

Цвет пикселя в текстовый документ
Здравствуйте, возникла такая задача: есть шум перлина в bmp изображении. Если цвет пикселя темнее чем (63,63,63) вернуть 1 в текстовый...

Текстовый документ в двумерный массив
Уважаемые, не хватает опыта: Схематически есть файл 1.txt, набит строками вида: .. text123 text456 text789.. textabc ...

Сохранить текстовый документ в кодировке Unicode
Создаю блокнот вот таким образом: StreamWriter sw = new StreamWriter(&quot;test.txt&quot;); Но по умолчанию он создаётся в кодировке ANSI, а...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru