Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.07.2016
Сообщений: 19

Если пользователь выбрал две кнопки с одинаковыми Caption-ами, убрать их с формы

22.07.2016, 11:38. Показов 1204. Ответов 27

Студворк — интернет-сервис помощи студентам
Доброго времени суток! У меня есть на форме несколько кнопок. нужно чтобы при нажатии на одну, а затем вторую он сравнил надписи на них (caption) и если они совпадают, то убрал их. типа как в маджонг. Помогите пожалуйста, у самой не выходит ничего((
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2016, 11:38
Ответы с готовыми решениями:

Выполнить макрос если пользователь выбрал один из элементов combobox'а
Вот файл При загрузке страницы выполняется макрос добавления в combobox значений как нужно описать макрос что бы он реагировал на...

Как запретить удаление строки в DataGridView, если пользователь не выбрал ни одной строки?
Здравствуйте! У меня есть datagridview и кнопка удаления записи на форме. Данные в datagridview попадают из таблицы базы данных...

Yii2 две кнопки у формы
Доброго времени суток! Как написать обработчик нескольких кнопок формы Yii2. При нажатии на обе кнопки данные из формы должны...

27
0 / 0 / 0
Регистрация: 14.07.2016
Сообщений: 19
22.07.2016, 16:19  [ТС]
Студворк — интернет-сервис помощи студентам
туплю немного уже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button15Click(TObject *Sender)
{
    static int kn1 = -1,kn2 = -1 ;
    for(int i=0; i<ComponentCount; i++)
      if(Components[i]->ClassNameIs("TButton") &&
         ((TButton*)Components[i])->Name == ((TButton*)Sender)->Name)
        if(kn1<0) kn1=i; else if(kn2<0) kn2=i;
         else { kn1=kn2; kn2=i; }
        if(kn1>=0 && kn2>=0 &&  kn1!=kn2 &&
      ((TButton*)Components[kn1])->Caption ==
      ((TButton*)Components[kn2])->Caption )
    {
      if(kn1<kn2) { delete (TButton*)Components[kn2];
                    delete (TButton*)Components[kn1]; }
      else  {  delete (TButton*)Components[kn1];
               delete (TButton*)Components[kn2];  }
       kn1=kn2=-1;
 
    }
}
вот код и он один раз срабатывает и высвечивает ошибку.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.07.2016, 16:27
Цитата Сообщение от bobrik007 Посмотреть сообщение
он один раз срабатывает и высвечивает ошибку
У меня работает. Попробуйте не delete, а изменить видимость кнопки__
C++
1
2
3
4
5
6
7
8
    if(kn1>=0 && kn2>=0 &&  kn1!=kn2 &&
      ((TButton*)Components[kn1])->Caption ==
      ((TButton*)Components[kn2])->Caption )
    {
       (TButton*)Components[kn1]->Visible = false;
       (TButton*)Components[kn2]->Visible = false;
       kn1=kn2=-1;
     }
0
0 / 0 / 0
Регистрация: 14.07.2016
Сообщений: 19
22.07.2016, 16:51  [ТС]
уже так и сделала Спасибо большое
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.07.2016, 16:57
Задание: создать случайное количество кнопок с повторяющимися названиями. Если пользователь нажимает одну кнопку, выделяем ее. Если вторую с таким же названием, то удаляем, если с другим названием, то снимаем выделение.

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
#define WM_DELETE_FROM_SENDER   WM_USER + 1
 
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) {
    for (int i = 0; i < 10; i++) {
        TButton *ABtn = new TButton(this);
        ABtn->Parent = this;
        ABtn->Align = alTop;
        ABtn->Caption = "Кнопка " + UnicodeString(Random(5));
        ABtn->OnClick = &Button1Click;
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TForm2::ApplicationEvents1Message(tagMSG &Msg, bool &Handled) {
    if (Msg.message == WM_DELETE_FROM_SENDER && Msg.hwnd == this->Handle) {
        TObject *AObject = (TObject*)Msg.wParam;
        AObject->Free();
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender) {
    TButton * ASelectedBtn = dynamic_cast<TButton*>(Sender);
    if (ASelectedBtn) {
        ASelectedBtn->Font->Style = ASelectedBtn->Font->Style.Contains(fsBold)
        ? ASelectedBtn->Font->Style >> fsBold : ASelectedBtn->Font->Style << fsBold;
 
        if (ASelectedBtn->Font->Style.Contains(fsBold)) {
 
            TButton *ACompareBtn = 0;
            for (int i = 0; i < this->ComponentCount; i++) {
                TButton *AButton = dynamic_cast<TButton*>(this->Components[i]);
                if (AButton && AButton->Font->Style.Contains(fsBold) && ASelectedBtn != AButton) {
                    if (ASelectedBtn->Caption == AButton->Caption) {
                        ACompareBtn = AButton;
                    }
                    else {
                        AButton->Font->Style = AButton->Font->Style >> fsBold;
                        ASelectedBtn->Font->Style = ASelectedBtn->Font->Style >> fsBold;
                    }
 
                    break;
                }
            }
            if (ACompareBtn) {
                PostMessage(this->Handle, WM_DELETE_FROM_SENDER, (int)ACompareBtn, 0);
                PostMessage(this->Handle, WM_DELETE_FROM_SENDER, (int)ASelectedBtn, 0);
            }
        }
    }
}
 
//---------------------------------------------------------------------------
0
Модератор
 Аватар для D1973
9903 / 6441 / 2454
Регистрация: 21.01.2014
Сообщений: 27,342
Записей в блоге: 3
22.07.2016, 17:01
Вот так можно без цикла обойтись... Если выбраны правильные кнопки - они исчезают, если неправильные - на полсекунды шрифт на кнопках становится красным и больше ничего не происходит...
Единственно, для этого пришлось использовать не TButton, а TBitBtn
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define Bt ((TBitBtn *)Sender)
  static bool b = false;
  static TBitBtn *Btn;
  if(!b) Btn = Bt;
  else
   if(Btn->Name != Bt->Name && Btn->Caption == Bt->Caption)
    {
      Btn->Visible = false;
      Bt->Visible = false;
    }
   else
    {
      Btn->Font->Color = clRed;
      Bt->Font->Color = clRed;
      this->Update();
      Sleep(500);
      Btn->Font->Color = clWindowText;
      Bt->Font->Color = clWindowText;
   }
  b = !b;
}
Добавлено через 3 минуты
Ух ты не увидел решения от Maluda... Ну это жесть для школьного-то задания
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.07.2016, 17:22
D1973, легкая оптимизация твоего кода, так как bool здесь излишен
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TBitBtn *Bt = dynamic_cast<TBitBtn*>(Sender);
    if (Bt) {
        static TBitBtn *Btn = 0;
 
        if (!Btn) {
            Btn = Bt;
        }
        else {
            if (Btn != Bt && Btn->Caption == Bt->Caption) {
                Btn->Visible = false;
                Bt->Visible = false;
            }
            else {
                Btn->Font->Color = clRed;
                Bt->Font->Color = clRed;
                this->Update();
                Sleep(500);
                Btn->Font->Color = clWindowText;
                Bt->Font->Color = clWindowText;
            }
            Btn = 0;
        }
    }
П.С. При скрытии кнопок со статическим указателем еще соглашусь, при удалении кнопок всё же пробегался бы по циклу. Особенно, если у пользователя они будут размещены на dock панелях, так как при отстыковке-пристыковке адрес объекта может измениться.
1
22.07.2016, 18:19

Не по теме:

Цитата Сообщение от Maluda Посмотреть сообщение
если у пользователя они будут размещены на dock панелях
ой, сомневаюсь я...

0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
22.07.2016, 18:20
Местами проглядывается в последнем приведенном коде нарушение авторских прав
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2016, 18:20
Помогаю со студенческими работами здесь

Две кнопки для одной формы
Здравствуйте. Допустим у меня есть форма: &lt;form name=&quot;MyForm&quot; action=&quot;/wp-content/themes/lime/mail.php&quot;...

Как убрать с формы кнопки управления?
Подскажите как убрать с формы кнопки управления, я имею ввиду: закрыть, свернуть, развернуть?

Убрать кнопки с формы с графиком (.NET)
В матлабе создал dll с компонентом .NET, который строит график в отдельном окне, так же как и в самом матлабе по функции plot. ...

Фильтровать те данные, которые выбрал пользователь
У меня есть форма, которая посылает данные, проблема в одном в переменной str, там с помощью &amp; данные идут только по порядку, но...

Узнать какой клон выбрал пользователь
При создании сцены,создаю клоны,записываю их в массив объектов,который висит на главной камеры for (i = 0; i &lt; n; i++) { Boxs...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru