Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 16
1

Как сделать чтобы combobox выполнял забор данных автоматически без кнопки?

28.07.2020, 14:09. Показов 2852. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Забираю значения ячеек stringgrid столбца 3 в combobox. Цель использовать потом эти значения как items.
Сделал то что нужно при нажатии кнопки. Но нужно, чтобы при нажатии на сам комбобокс это все срабатывало.
Как сделать чтобы combobox выполнял забор данных автоматически без кнопки?

Delphi
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
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    ComboBox1: TComboBox;
    Button2: TButton;
    Button1: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 var
iter, index :integer;
begin
Combobox1.Items:=stringgrid1.Cols[3];
begin
begin
for iter := combobox1.Items.Count - 1 downto 0 do
begin
  index := combobox1.Items.IndexOf(combobox1.Items[iter]);
  if index < iter then
    combobox1.Items.Delete(iter);
end;
end;
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j,m,n : Integer;
  Sg : TStringGrid;
begin
  Sg := StringGrid1;
  Randomize;
  m:= Sg.RowCount;
  n:= Sg.ColCount;
  for i := Sg.FixedRows  to m - 1 do
    for j := Sg.FixedCols  to n - 1 do
      StringGrid1.Cells[j, i] := IntToStr( Random(10) );
end;
 
end.
Вложения
Тип файла: rar Новая папка (2).rar (5.4 Кб, 0 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2020, 14:09
Ответы с готовыми решениями:

Как сделать, чтобы при нажатии кнопки, автоматически кликала мышка?
Как сделать, чтобы при нажатии кнопки, автоматически кликала мышка? Срочно нужно.

как сделать чтобы калькулятор считал автоматически без нажатия на кнопку
помогите кто может.как сделать чтобы калькулятор считал автоматически без нажатия на кнопку...

Как сделать так, чтобы при нажатии кнопки появлялся текст?Чтобы без javascript
Как сделать так, чтобы при нажатии кнопки появлялся текст? На html или php можно сделать . Типо...

Как сделать чтобы foreach выполнял перебор каждого элемента в отдельном потоке?
Вот допустим есть такой код.Как сделать чтобы foreach выполнял перебор каждого элемента в отдельном...

8
16 / 8 / 8
Регистрация: 23.06.2020
Сообщений: 45
28.07.2020, 14:44 2
А не возникала мысль заполнить комбобокс там-же, где вы StringGrid1 наполняете?
И не могли бы вы прокомментировать что по задумке должно происходить в TForm1.Button1Click ?
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 16
28.07.2020, 15:49  [ТС] 3
Мысль такая не возникала, даже и не знаю как это будет выглядеть. По задумке в Button1 происходит забор ячеек 3 поля стринггрид и преобразование их в items, потом я просто удаляю повторяющиеся значения и оставляю весь перечень уникальных
0
Модератор
9267 / 6045 / 2380
Регистрация: 21.01.2014
Сообщений: 25,816
Записей в блоге: 3
28.07.2020, 16:50 4
Лучший ответ Сообщение было отмечено Vectorman13 как решение

Решение

Цитата Сообщение от Vectorman13 Посмотреть сообщение
Как сделать чтобы combobox выполнял забор данных автоматически без кнопки?
Вот так можно заполнить комбобокс уникальными значениями из столбца СтрингГрида с номером NN в момент получения фокуса этим самым комбобоксом...
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.ComboBox1Enter(Sender: TObject);
var L: TStringList;
begin
  ComboBox1.Items.Clear;
  L := TStringList.Create;
  L.Sorted := true;
  L.Duplicates := dupIgnore;
  L.Assign(StringGrid1.Cols[NN]);
  ComboBox1.Items.Assign(L);
  L.Free;
end;
0
16 / 8 / 8
Регистрация: 23.06.2020
Сообщений: 45
28.07.2020, 16:51 5
Лучший ответ Сообщение было отмечено Vectorman13 как решение

Решение

Что-то подобное я и подозревал, но реализация... как-бы помягче выразится... несколько своеобразная
Вам надо воспользоваться вспомогательным классом TStringList, который уже умеет создавать уникальный список.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
// Настраиваем TStringList на создание отсортированного списка без повторов
SL := TStringList.Create;
SL.Duplicates := dupIgnore;
SL.Sorted := True;
// Изменяем ваш цикл
for j := Sg.FixedCols  to n - 1 do
begin
      StringGrid1.Cells[j, i] := IntToStr( Random(10) );
      if i=3 then SL.Add(StringGrid1.Cells[j, i]);
end;
//И в финале присваиваем уникальный список комбику
ComboBox1.Items.Assign(SL)
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
28.07.2020, 22:49 6
Spherical moose, а зачем перебирать грид? у грида все колонки и строки это как раз TStrings
0
669 / 559 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
29.07.2020, 04:13 7
Spherical moose, Очень странный код. Переменная "i" нигде не задана.
Цитата Сообщение от Spherical moose Посмотреть сообщение
if i=3 then SL.Add(StringGrid1.Cells[j, i]);
Шанс, что этот код выполнится кране мал.
0
16 / 8 / 8
Регистрация: 23.06.2020
Сообщений: 45
29.07.2020, 14:08 8
Лучший ответ Сообщение было отмечено Vectorman13 как решение

Решение

Странный он потому-что не целый, а часть для замены внутреннего цикла из авторского кода в первом сообщении. Решил не дублировать.
Полная версия выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j,m,n : Integer;
  Sg : TStringGrid;
  SL: TStringList;
begin
  Sg := StringGrid1;
  Randomize;
  m:= Sg.RowCount;
  n:= Sg.ColCount;
  SL := TStringList.Create;
  SL.Duplicates := dupIgnore;
  SL.Sorted := True;
  for i := Sg.FixedRows  to m - 1 do
  for j := Sg.FixedCols  to n - 1 do
  begin
  StringGrid1.Cells[j, i] := IntToStr( Random(10) );
  if j=3 then SL.Add(StringGrid1.Cells[j, i]);
  end;
  ComboBox1.Items.Assign(SL);
end;
И когда собрал, увидел что проверяю строку вместо столбца. Подправил.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 16
31.07.2020, 13:10  [ТС] 9
Спасибо ребята все работает
0
31.07.2020, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2020, 13:10
Помогаю со студенческими работами здесь

Как сделать так, чтобы VB.Net сканировал текст и находя в нем символ, выполнял действие?
Помогите, пожалуйста! Р.S. Простите за ошибки

как сделать, чтобы при воде данных в форму они автоматически заносилсь в таблицу
Здравствуйте, добрые люди! Может кто нибудь подскажет, как надо отформатировать запрос на...

Как сделать так, чтобы при вводе данных в одной таблице, они вводились автоматически во второй?
У меня есть две таблицы в SQL Заявки и Материалы. В Материалах есть поля код материала,...

Как сделать так, чтобы при выборе combobox открывался новый form без дополнительных кнопок (button)?
Что можете предложить? Очень нужно!

Как в textbox сделать так, чтобы нормально считывал ворд документ без использования кнопки?
Как в textbox сделать так, чтобы нормально считывал ворд документ без использования кнопки? Просто,...

Как сделать чтобы при нажатии кнопки чтобы активировались все неактивные кнопки?
На форме имеются три кнопки. При открытии формы кнопка &quot;button1&quot; становится неактивна:...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru