0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 86
1

Упрощение кода

13.11.2017, 00:24. Показов 903. Ответов 4
Метки нет (Все метки)

Уважаемые знатоки. Есть такая часть кода в программе.
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
sel=List->Selected->AbsoluteIndex+1;
    switch (sel)
    {
        case 1:                                  //Общие
        {
            BoxLang->Top= 8;
            BoxLang->Left= 160;
            BoxLang->Visible= true;
            ShowTest->Visible= false;
            SetPass->Visible= false;
            EditingTest->Visible= false;
            Set->Visible= false;
            break;
        }
        case 3:                                  //Редактирование
        {
            EditingTest->Top= 8;
            EditingTest->Left= 160;
            EditingTest->Visible= true;
            ShowTest->Visible= false;
            SetPass->Visible= false;
            BoxLang->Visible= false;
            Set->Visible= false;
            break;
        }
        case 4:                                  //Просмотр теста
        {
            ShowTest->Top= 8;
            ShowTest->Left= 160;
            ShowTest->Visible= true;
            SetPass->Visible= false;
            BoxLang->Visible= false;
            Set->Visible= false;
            EditingTest->Visible= false;
            break;
        }
        case 5:                                  //Результаты
        {
            Set->Top= 8;
            Set->Left= 160;
            Set->Visible= true;
            ShowTest->Visible= false;
            SetPass->Visible= false;
            BoxLang->Visible= false;
            EditingTest->Visible= false;
            break;
        }
 
        case 6:                                  //Смена пароля
        {
            SetPass->Top= 8;
            SetPass->Left= 160;
            SetPass->Visible= true;
            ShowTest->Visible= false;
            BoxLang->Visible= false;
            EditingTest->Visible= false;
            Set->Visible= false;
            break;
        }
    }
Можно ли этот код сделать более компактным? Упростить его.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2017, 00:24
Ответы с готовыми решениями:

Упрощение кода программ
Ув. программисты,все мы пишем программы и у всех у нас иногда появляются ненужные куски кода.Мне...

Перечисление обьектов image.упрощение кода
В общем такая ситуация есть событие при нажатии кнопки где расставляются 30 картинок по...

Упрощение имени файла
Как в С++ Builder упростить имя файла? Например из "C:\новая папка\File.txt" сделать просто...

Упрощение библиотек ?
Вы всем, когда пишите ответы с кодом поправляете библиотеки вот пример : #include "stdafx.h"...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32451 / 20945 / 8105
Регистрация: 22.10.2011
Сообщений: 36,212
Записей в блоге: 7
13.11.2017, 00:58 2
Лучший ответ Сообщение было отмечено Жора1111 как решение

Решение

Можно. Напиши функцию:
C++
1
2
3
4
5
6
7
8
9
10
void SetValues(TControl *c1, TControl *c2, TControl *c3, TControl *c4, TControl *c5)
{
            c1->Top= 8;
            c1->Left= 160;
            c1->Visible= true;
            c2->Visible= false;
            c3->Visible= false;
            c4->Visible= false;
            c5->Visible= false;
}
, и перепиши свой фрагмент:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sel=List->Selected->AbsoluteIndex+1;
    switch (sel)
    {
        case 1:                                  //Общие
            SetValues(BoxLang, ShowTest, SetPass, EditingTest, Set);
            break;
 
        case 3:                                  //Редактирование
            SetValues(EditingTest, ShowTest, SetPass, BoxLang, Set);
            break;
 
        case 4:                                  //Просмотр теста
            SetValues(ShowTest, SetPass, BoxLang, Set, EditingTest);
            break;
 
        case 5:                                  //Результаты
            SetValues(Set, ShowTest, SetPass, BoxLang, EditingTest);
            break;
 
        case 6:                                  //Смена пароля
            SetValues(SetPass, ShowTest, BoxLang, EditingTest, Set);
            break;
    }
Достаточно просто?
1
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 86
13.11.2017, 01:03  [ТС] 3
Да, спасибо большое.
0
Практикантроп
4773 / 2673 / 517
Регистрация: 23.09.2011
Сообщений: 5,725
13.11.2017, 09:36 4
Лучший ответ Сообщение было отмечено Жора1111 как решение

Решение

Цитата Сообщение от Жора1111 Посмотреть сообщение
Можно ли этот код сделать более компактным?
Хорошо бы знать, что за компоненты используются. Если ничего экзотического, то в обработчике ListClick() можно записать такой цикл__
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::ListClick(TObject *Sender)
{
     int Nx = List->Selected->AbsoluteIndex;
     TControl *Cr[6] = { BoxLang,0,EditingTest,ShowTest,Set,SetPass };
     for(int i=0;i<6;i++) if(Cr[i]) {
       Cr[i]->Visible = i==Nx;
       if(i==Nx) { Cr[i]->Top=8; Cr[i]->Left=160; }
     }
}
1
0 / 0 / 0
Регистрация: 24.11.2016
Сообщений: 86
13.11.2017, 22:55  [ТС] 5
Спасибо и вам тоже.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 22:55
Помогаю со студенческими работами здесь

Упрощение кода
Ребята задача стояла такая, есть див asd_glavn на его фоне 5 блоков , нужно было сделать так что...

Упрощение кода
Имеется несколько функций, где идет проверка заданной строки и потом выдает значение. Но вот в чем...

Упрощение кода
void Polynomials::print(){ // Вывод полинома int i; int k; // признак того, что...

Упрощение кода
Всем привет!! Попалась на вёрстку менюшка с противными разделителями...ну совсем не стандартными....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru