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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2016, 14:35   #1
hawo4eg
Новичок
Джуниор
 
Регистрация: 29.09.2016
Сообщений: 3
По умолчанию Label перенос строки на новую

Помогите новичку, есть код примитивного теста на C# c вопросом (label) и 3 ответами (radio.button), которые выводятся на форме, вопросы берутся из .txtшника, но если вопрос или ответ слишком длинный он выходит за форму, необходим перенос строки на новую. Приношу извинения за глупый вопрос. Искал ответ на форумах так и не нашел. В идеале, конечно, кому будет нетяжело подсказать, чтобы из txt при выводить вопросы в случайном порядке при повторном прохождении теста (нажатии на "начать тестирование")Спасибо.
Код:
 public partial class Form1 : Form
    {
        // Внешние переменные:
        int СчетВопросов; // Счет вопросов
        int ПравилОтветов;  // Количество правильных ответов
        int НеПравилОтветов; // Количество не правильных ответов
        // Массив вопросов, на которые даны неправильные ответы:
        String[] НеПравилОтветы; // Размерность этого массива зададим позже
        int НомерПравОтвета;  // Номер правильного ответа
        int ВыбранОтвет;  // Номер ответа, выбранный студентом
        System.IO.StreamReader Читатель;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            button1.Text = "Следующий вопрос";
            button2.Text = "Выход";
            // Подписка на событие изменение состояния
            // переключателей RadioButton:
            radioButton1.CheckedChanged += new EventHandler(ИзмСостПерекл);
            radioButton2.CheckedChanged += new EventHandler(ИзмСостПерекл);
            radioButton3.CheckedChanged += new EventHandler(ИзмСостПерекл);
            НачалоТеста();
        }
        void НачалоТеста()
        {
            var Кодировка = System.Text.Encoding.GetEncoding(1251);
            try
            {
                // Создание экземпляра StreamReader для чтения из файла
                Читатель = new System.IO.StreamReader(
                System.IO.Directory.GetCurrentDirectory() +
                                               @"\test.txt", Кодировка);
                this.Text = Читатель.ReadLine(); // Название предмета
                // Обнуление всех счетчиков:
                СчетВопросов = 0; ПравилОтветов = 0; НеПравилОтветов = 0;
                // Задаем размер массива для НеПравилОтветы:
                НеПравилОтветы = new String[100];
            }
            catch (Exception Ситуация)
            {   // Отчет о всех ошибках:
                MessageBox.Show(Ситуация.Message, "Ошибка",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            ЧитатьСледВопрос();
        }
        void ЧитатьСледВопрос()
        {
            label1.Text = Читатель.ReadLine();
            // Считывание вариантов ответа:
            radioButton1.Text = Читатель.ReadLine();
            AutoSize = true;
            radioButton2.Text = Читатель.ReadLine();
            AutoSize = true;
            radioButton3.Text = Читатель.ReadLine();
            AutoSize = true;
         // Выясняем, какой ответ - правильный:
            НомерПравОтвета = int.Parse(Читатель.ReadLine());
            // Переводим все переключатели в состояние "выключено":
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            // Первую кнопку задаем не активной, пока студент не выберет
            // вариант ответа
            button1.Enabled = false;
            СчетВопросов = СчетВопросов + 1;
            // Проверка, конец ли файла:
            if (Читатель.EndOfStream == true) button1.Text = "Завершить";
        }
        void ИзмСостПерекл(Object sender, EventArgs e)
        {
            // Кнопка "Следующий вопрос" становится активной, и ей
            // передаем фокус:
            button1.Enabled = true; button1.Focus();
            RadioButton Переключатель = (RadioButton)sender;
            var tmp = Переключатель.Name;
            // Выясняем номер ответа, выбранный студентом:
            ВыбранОтвет = int.Parse(tmp.Substring(11));
        }
        private void button1_Click(object sender, EventArgs e)
        {
            // Щелчок на кнопке
            // "Следующий вопрос/Завершить/Начать тестирование снач"
            // Счет правильных ответов:
            if (ВыбранОтвет == НомерПравОтвета) ПравилОтветов =
                                                ПравилОтветов + 1;
            if (ВыбранОтвет != НомерПравОтвета)
            {
                // Счет неправильных ответов:
                НеПравилОтветов = НеПравилОтветов + 1;
                // Запоминаем вопросы с неправильными ответами:
                НеПравилОтветы[НеПравилОтветов] = label1.Text;
            }
            if (button1.Text == "Начать тестирование сначала")
            {
                button1.Text = "Следующий вопрос";
                // Переключатели становятся видимыми, доступными для выбора:
                radioButton1.Visible = true;
                radioButton2.Visible = true;
                radioButton3.Visible = true;
                // Переход к началу файла:
                НачалоТеста(); return;
            }
            if (button1.Text == "Завершить")
            {
                // Закрываем текстовый файл:
                Читатель.Close();
                // Переключатели делаем невидимыми:
                radioButton1.Visible = false;
                radioButton2.Visible = false;
                radioButton3.Visible = false;
                // Формируем оценку за тест:
                label1.Text = String.Format("Тестирование завершено.\n" +
                    "Правильных ответов: {0} из {1}.\n" +
                    "Оценка в пятибальной системе: {2:F2}.", ПравилОтветов,
                    СчетВопросов, (ПравилОтветов * 5.0F) / СчетВопросов);
                // 5F - это максимальная оценка
                button1.Text = "Начать тестирование сначала";
                // Вывод вопросов, на которые "Вы дали неправильный ответ":
                var Str = "СПИСОК ВОПРОСОВ, НА КОТОРЫЕ ВЫ ДАЛИ " +
                          "НЕПРАВИЛЬНЫЙ ОТВЕТ:\n\n";
                for (int i = 1; i <= НеПравилОтветов; i++)
                    Str = Str + НеПравилОтветы[i] + "\n";
 
                // Если есть неправильные ответы, то вывести через
                // MessageBox список соответствующих вопросов:
                if (НеПравилОтветов != 0) MessageBox.Show(
                                          Str, "Тестирование завершено");
            } // Конец условия if (button1.Text == "Завершить")
            if (button1.Text == "Следующий вопрос") ЧитатьСледВопрос();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            // Щелчок на кнопке "Выход"
            this.Close();
        }
hawo4eg вне форума Ответить с цитированием
Старый 01.10.2016, 14:57   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

http://stackoverflow.com/questions/9...-word-wrapping

Вроде бы можно задать у Label свойство MaximumSize (и AutoSize = true) и тогда будет переноситься.

А зачем давать переменным имена на русском? Неудобно ж переключаться постоянно, и читателям кода непривычно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.10.2016, 17:46   #3
hawo4eg
Новичок
Джуниор
 
Регистрация: 29.09.2016
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
http://stackoverflow.com/questions/9...-word-wrapping

Вроде бы можно задать у Label свойство MaximumSize (и AutoSize = true) и тогда будет переноситься.

А зачем давать переменным имена на русском? Неудобно ж переключаться постоянно, и читателям кода непривычно.
Label то теперь переносится, а вот как быть с radio.button'нами, чтобы они тоже переносились

Код:
   
            label1.Text = Читатель.ReadLine();
            label1.MaximumSize = new Size(600, 50);
            // Считывание вариантов ответа:
 ???//     radioButton1.Text = Читатель.ReadLine();
            radioButton2.Text = Читатель.ReadLine();
            radioButton3.Text = Читатель.ReadLine();
hawo4eg вне форума Ответить с цитированием
Старый 01.10.2016, 18:51   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Переносилось что? Так же длинные строки ответов или сами радиобатоны переносились ниже?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.10.2016, 19:41   #5
hawo4eg
Новичок
Джуниор
 
Регистрация: 29.09.2016
Сообщений: 3
По умолчанию

Чтобы строки с ответами тоже переносились которые выводятся на radio.button1,2,3.
hawo4eg вне форума Ответить с цитированием
Старый 01.10.2016, 19:53   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так и там вроде бы можно так же.

Если надо передвинуть элемент, то что-то типа
Код:
radioButton.Top = previousElement.Top + previousElement.Height;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос текста на новую строку в MessageBox oldsnowman Win Api 4 25.08.2016 11:54
Перенос ячеек на новую строку с форматированием Z@kat Microsoft Office Excel 6 24.07.2012 14:26
Перенос на новую строку cargo29 PHP 2 21.09.2011 20:51
Перенос макроса в новую книгу в Workbook_open() Daren Microsoft Office Excel 4 05.04.2011 13:27