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

Создание новой копии компонента при нажатии Enter

14.07.2014, 11:10. Показов 1571. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите Как можно при помощи нажатия Enter или любую клавишу можно создать повторно такой же компонент(ComboBox или Edit)?

при
C++
1
2
3
4
5
6
7
void __fastcall TForm3::FormCreate(TObject *Sender)
{
 if ( ComboBox1 -> Items -> Add ("Pol"))
  {
     ComboBox2 -> Items -> Add("Лысый");
  }
}
и при нажатие Enter;
C++
1
2
3
4
5
void __fastcall TForm3::ComboBox2KeyPress(TObject *Sender, char &Key)
{
if (Key == 13) { 
ComboBox3->SetFocus();
}
Мне приходиться вручную создавать компонент ComboBox3
Как сделать так чтобы при нажатие Enter создался новый компонент ComboBox?
Буду очень благодарен за ответ.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.07.2014, 11:10
Ответы с готовыми решениями:

Удаление компонента и последующее создание его копии
То есть компонент исчезает с лица формы с помощью функции delete(CutegoryButtons), а потом нужно создать точно такой же category buttons с...

Действия при нажатии на клавишу Enter
Ребят, хочу чтобы при нажатии клавиши Enter отправлялось сообщение в программе, а не по нажатию кнопки Button, как это реализовать?

Не делается пропуск строки при нажатии Enter
нелепая проблема)подскажите, не добавляет строку при нажатии enter при написании кода, просто переходит на новую строку возможно что-то...

11
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,399
Записей в блоге: 3
14.07.2014, 11:26
При нажатии Enter в тот момент, когда фокус находится на компоненте ComboBox1, прямо под ним будет создан компонент ComboBox3 и на него будет передан фокус ввода...
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, wchar_t &Key)
{
  if(Key == 13)
   {
      TComboBox *ComboBox3 = new TComboBox(this);
      ComboBox3->Parent = this;
      ComboBox3->Left = ComboBox1->Left;
      ComboBox3->Top = ComboBox1->Top + ComboBox1->Height + 2;
      ComboBox3->SetFocus();
   }
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.07.2014, 12:50
C++
1
if(Key == VK_RETURN)
0
1 / 1 / 1
Регистрация: 14.03.2014
Сообщений: 46
14.07.2014, 13:44
Только учти по какому событию сработает отслеживание клавиши. Если по событию ComboBox'a, то фокус в этот момент должен быть на нем.
А если тебе нужно вообще создать компонент на форме, не тыкая в свой комбо бокс, то описывай отслеживание клавиши в событии
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key == VK_RETURN)
{
//создать новый combo box и тд..
}
 
}
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,399
Записей в блоге: 3
14.07.2014, 15:57
Цитата Сообщение от Zerorc Посмотреть сообщение
А если тебе нужно вообще создать компонент на форме, не тыкая в свой комбо бокс, то описывай отслеживание клавиши в событии
и не забыть в этом случае, что свойство формы KeyPreview == true.
Но это как бы хм-м-м... случайное нажатие Ентера - и левый комбобокс обеспечен... Надо тогда какое-то подтверждение делать, надо ли оно, это действие, или рука просто дрогнула...
0
0 / 0 / 0
Регистрация: 13.07.2014
Сообщений: 54
15.07.2014, 19:28  [ТС]
Спасибо ребята. Действительно появился компонент ComboBox, но это ни то что я хотел. В мои созданные компоненты ComboBox я настроил переходы и публикации:
C++
1
2
3
4
5
6
void __fastcall TForm3::ComboBox1KeyPress(TObject *Sender, char &Key)
{
if (Key == 13) {
ComboBox2->SetFocus();
Form4->Label3->Caption = ComboBox1->Text;
}
В то числе и на все остальные компоненты Комбобоксов убрал видемость и при нажатии например на Enter в Комбобоксе будет выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm3::ComboBox3KeyPress(TObject *Sender, char &Key)
{
if (Key == 13) {
Form4->Label5->Caption = ComboBox3->Text;
 
 ComboBox4->Visible = true;
 ComboBox5->Visible = true;
 ComboBox6->Visible = true;
  Edit5->SetFocus();
}
}
Я хотел все это взять в процедуру и чтоб когда нажал Enter в Комбобоксе появилась такая же строка Комбобоксов что и в предыдущем. Это чтоб в каждый раз не включать видемость, переход, сложение по другой форме и.т.д
Ни то пока создал 10 комбобоксов и настроил с ума чуть не сошел. А так появление компонента мне еще пригадиться еще, что написали ранее Спасибо
0
16.07.2014, 06:14

Не по теме:

Хм-м-м... Я, скорее всего, туплю с утра, но так и не понял, что надо было сделать...

0
0 / 0 / 0
Регистрация: 13.07.2014
Сообщений: 54
16.07.2014, 10:23  [ТС]
Согласен, Да я тебя с легка запутал. В место Edit можно ComboBox4 ом по пользоваться для точности. Только там еще и включена форма 4 (Form4) для появления информации в новой форме при нажатии на Button

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
#include "Unit4.h"
 
 
void __fastcall TForm3::FormCreate(TObject *Sender)
{
 
 Procedure (13); {
 ComboBox2->Items->Add("Лысый");
 
  if (ComboBox1->Items->Add("Pol"))
  {
     ComboBox2->Items->Add("Лысый");
  }
    ComboBox3->Items->Add("Вася");
 
  if (ComboBox1->Items->Add("Jeff"))
  {
      ComboBox2->Items->Add("Лучший");
  }
   ComboBox3->Items->Add("Доминирующий");
 
  if (ComboBox1->Items->Add("Mat"))
  {
       ComboBox2->Items->Add("Странный");
  }
        ComboBox3->Items->Add("Кто то в этом роде");
  if (ComboBox1->Items->Add("Bret"))
  {
       ComboBox2->Items->Add("Иной");
  }
        ComboBox3->Items->Add("ДА ну на");
  }
 
 
void __fastcall TForm3::ComboBox2CloseUp(TObject *Sender)
{
if (ComboBox2->ItemIndex < ComboBox3->Items->Count)
        ComboBox3->ItemIndex = ComboBox2->ItemIndex;
 
void __fastcall TForm3::ComboBox1KeyPress(TObject *Sender, char &Key)
{
if (Key == 13) {
ComboBox2->SetFocus();
Form4->Label3->Caption = ComboBox1->Text;
}
 
void __fastcall TForm3::ComboBox2KeyPress(TObject *Sender, char &Key)
{
if (Key == 13) {
ComboBox3->SetFocus();
Form4->Label4->Caption = ComboBox2->Text;
}
}
 
void __fastcall TForm3::ComboBox3KeyPress(TObject *Sender, char &Key)
{
if (Key == 13) {
 
 Form4->Label5->Caption = ComboBox3->Text;
 ComboBox4->SetFocus();
 
 ComboBox4->Visible = true;
 ComboBox5->Visible = true;
 ComboBox6->Visible = true;
 
 
}
}
Я вот хочу взять всё это в одну процедуру и в цыкл повтора, чтоб когда на последним комбобоксе нажал на Enter все точно также повторялось создавая с нижний строки такое же число комбобоксов с теми же функциями. Повтор должен длиться пока не нажал на какой нибудь Button или еще что нибудь не сделал.
Как можно поставить цыкл повтора и взять всё это в процедуру?
0
1 / 1 / 1
Регистрация: 14.03.2014
Сообщений: 46
16.07.2014, 13:31
Попробуй конструкцию в событие запихнуть
C++
1
2
3
4
5
6
7
8
9
10
11
12
switch ( <переменная> ) {
case значение1:
  Выполнить если <переменная> == значение1
  break;
case значение2:
  Выполнить если <переменная> == значение2
  break;
...
default:
  выполнить, если ни один вариант не подошел
  break;
}
И возьми переменную, которая будет считать нажатия Enter, а после, когда счетчик переменной достигнет последнего варианта, сбрасывать его на нулевой вариант. Если я правильно понял, что ты хочешь. Потому что действительно запутано)
0
0 / 0 / 0
Регистрация: 13.07.2014
Сообщений: 54
16.07.2014, 22:15  [ТС]
Извини братан не буду скрывать но, я по этой схеме шифрования новичек
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.07.2014, 06:54
INSULIN, программист ты или нет?! Давай точно и по существу, мол, комбобоксы делаются группами по три штуки; при нажатии enter в первом боксе первой группы должно происходить то-то и то-то, при нажатии enter в последнем боксе первой группы должна создаваться вторая группа, размещаясь там-то и там-то, - в событиях второй группы боксов должно быть то-то и то-то; текст с первого бокса при нажатии enter в нем должен выводится туда-то, текст с третьего бокса второй группы должен выводиться туда-то... Вот в таком ключе и поконкретней это все.
1
0 / 0 / 0
Регистрация: 13.07.2014
Сообщений: 54
27.11.2014, 10:22  [ТС]
Ну на подобии того, я не знаю как с switch обращаться надо разобраться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2014, 10:22
Помогаю со студенческими работами здесь

Отключить стандартный звук при нажатии Enter в компоненте TEdit
Всем трямс, есть обработка при нажатии на enter в поле Edit, так вот как избавиться от &quot;стандартного звука&quot; из звуковой схемы...

В Edit убрать текст и при нажатии enter вывести сообщение
Нужно в Edit убрать текст и при нажатии enter вывести сообщение в котором будет максимальное кол символов. Если max=Text.Length();...

ComboBox, после выбора компонента что при нажатии на кнопку открывалась новая форма!
То есть: есть combobox выбираешь что то от туда либо после выбора сразу открывалась новая форма или после нажатия кнопки как это...

DBGrid: при нажатии Enter после редактирования поля сразу обновлять данные в базе
Имеется DBGrid DataSource и ADODataSet. У DBGrid разрешено редактирование. По даблклику в поле редактируется текст в нем, затем...

Организовать ,что при нажатии Enter входит в меню , а при нажатии Esc выходит с программы
Вот кусочек курсовой , помогите организовать такую вещь как при нажатии Enter входит в меню , а при нажатии Esc выходит с программы.Если...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru