powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Имя контрола на форме в переменной
29 сообщений из 29, показаны все 2 страниц
Имя контрола на форме в переменной
    #39648952
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, здравствуйте.

Сам по Access.
Волею судеб ))) попал в Delphi.

В аксе я мог обратиться к контролу по имени, из переменной:
Код: vbnet
1.
Forms!Form1(strNameField) = 0 


пробовал
в цикле
Код: pascal
1.
Form1('Edit' + IntToStr(i)).Text := IntToStr(IdValue[i]);


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

Может подскажете?
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648956
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.05.2018 19:07, Игортан пишет:
> кроме способа перебора контролов, ничего не нашел здесь.
> Может подскажете?

кроме перебора способа нет.
можно конечно по хэндлу, но тебе это вряд ли подойдёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648958
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Спасибо за быстрый ответ.
Жаль конечно.
Да, по хендлу, его все равно знать нужно...
А городить, на 5 контролов перебора, огород не хочется.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648959
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.05.2018 19:17, Игортан пишет:
> А городить, на 5 контролов перебора, огород не хочется.

функция в одну строчку кода
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648960
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Скиньте, пожалуйста на посмотреть
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648966
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанСкиньте, пожалуйста на посмотреть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  function FindControl(ControlName: string): TControl;
  var
    i: integer;
  begin
    Result := nil;
    for i := 0 to ControlCount - 1 do
      if AnsiSameText(ControlName, Controls[i].Name) then
        begin
          Result := Controls[1];
          Break;
        end;
  end;
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648985
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Спасибо за пример!
В общем, уж взялся, сделал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  for j :=1 to 5 do
  begin
    ControlName := 'Edit' + IntToStr(j);
    for i := 0 to ControlCount - 1 do
      if AnsiSameText(ControlName, Controls[i].Name) then
        begin
          Controls[i].SetTextBuf(PChar(IdValue[i]));
          Break;
        end;
  end;
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39648989
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

А нет, бьет ошибку на присваивание текста...
что то ничего ближе присваивания значения эдиту не нашел.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649011
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чо, FindComponent отменили ?
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649065
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Код: pascal
1.
Result := Controls[1];

От же ж смешно
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649068
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанИгортан,

А нет, бьет ошибку на присваивание текста...
что то ничего ближе присваивания значения эдиту не нашел.
Код: pascal
1.
Controls[i].SetTextBuf(PChar(IdValue[i]));


Код: pascal
1.
2.
if Controls[i] is TEdit then
  ( Controls[i] as TEdit ).Text := IdValue[i];
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649183
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.05.2018 23:54, YuRock пишет:
> От же ж смешно

не пали контору.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649368
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, Мимопроходящий, YuRock.
Спасибо, потренировался)))
Про приведение типа даже не подумал сразу...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  for j :=1 to 5 do
    for i := 0 to ControlCount - 1 do
      if AnsiSameText('Edit' + IntToStr(j), Controls[i].Name) then
      begin
        (Controls[i] as TEdit).Text := IntToStr(IdValue[j-1]);
        Break;
      end;



Получилось не короче ))), но...
не догнал, так хоть согрелся)))
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649445
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

Повторюсь: FindComponent.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649459
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанПро приведение типа даже не подумал сразу...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  for j :=1 to 5 do
    for i := 0 to ControlCount - 1 do
      if AnsiSameText('Edit' + IntToStr(j), Controls[i].Name) then
      begin
        (Controls[i] as TEdit).Text := IntToStr(IdValue[j-1]);
        Break;
      end;


Получилось не короче ))), но...
не догнал, так хоть согрелся)))

Угу, грабельки ты себе аккуратно разложил, не спорю :) Положи на форму TPanel и назови ее Edit1. Удивишься :)
Не нужно тупо приведение типов делать в общем случае - нужно IS использовать:

Код: pascal
1.
   if (Controls[i] is TEdit) then TEdit(Controls[i]).Text:='.....';
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649485
Здравый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
самый здравый смысл тут, создать список нужныъ edit-ов, явно все не нужны будут
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649487
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Да, да.
Я проблему имени контрола и его типа понимаю.
И проверку типа контрола нужно делать в более серьезных приложениях)))
Это учебный код))))
Там проще было написать 5 строчек повторяющегося кода для 5 контролов.
Да как то совесть не позволяет писать такого уровня код.
И городить вместо 5 строк, десяток не хотелось....
Хотя, конечно, раз назвался груздем...нужно проверку вставить.
Спасибо за наставление.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649492
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

Если писать процедуру/функцию - очевидно нужно подумать о ее универсальном использовании. 5 лишних срочек и 15 минут сегодня реально сэкономят 100500 часов завтра :)
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649556
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я скорее склоняюсь к тому, что такой стиль программирования даже в Access-е зло, не говоря уже о Delphi.
Задавать свойства контролов лучше по ООП-шному - через свойства (property) формы, а уже как данные на форме представленны (через текстовый редактор или комбобокс) это вопрос десятый.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649596
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka,

Для внесения данных из массива в определенные едиты тоже нужно делать циклом.
Форма - Контролы - проверка типа/имени(если есть имена) - присваивание.
Но по имени, конечно, существует условность - что контролы с именами соответствуют задуманному смыслу.
Я делал там или по префиксу или по постфиксу,
или "договоренность" заливки данных из рекордсета
что имена полей формы и рекордсета совпадают.

Мы же все равно не стреляем в небо.
Нам нужно присвоить контролу значение, кроме имени (идентификатор не в счет) уникальности не будет.
Потому и ищем по имени, а перед вставкой уже нужна(ли) проверка типа контрола.
Ли - потому что контрол заранее известен или подразумевается его соответствие.

Хотя, если вы мне покажете другой способ буду очень признателен.
Возможно это я недоросший)))
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649626
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортанили "договоренность" заливки данных из рекордсета
что имена полей формы и рекордсета совпадают.
Для этого придумали DB контролы и имена не имеют вообще никакого значения
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649628
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

просто интересно, а зачем вам это? Какую вы задачу решаете с помощью поиска контрола по имени?
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649629
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пардон, 2-умя постами выше нашел
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649631
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

Да тут больше узнать более адекватный метод работы.
А то может это только я думаю, что я что то умею/знаю))) а на самом деле велосипеды изобретаю, как минимум)))
DimaBrДля этого придумали DB контролы и имена не имеют вообще никакого значения
Это вы в Delphi имеете ввиду DBGrid?
Да в общем и в Access я уже эволюционно перехожу на работу в стиле ООП, на сколько позволяет Access.
DimonkaЗадавать свойства контролов лучше по ООП-шному - через свойства (property) формы, а уже как данные на форме представленны (через текстовый редактор или комбобокс) это вопрос десятый.
Это не совсем понял.
Я так понимаю, речь о чем то универсальном и переносимом.
Можно пример?
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649725
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанDimaBrДля этого придумали DB контролы и имена не имеют вообще никакого значенияЭто вы в Delphi имеете ввиду DBGrid?DBGrid, DBEdit, DB(Lookup)ComboBox, DBLabel. Если поискать, то DBDatetimePicker
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649734
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

Код: pascal
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.
...
type 
  TSomeEditor = class(TForm)
    ebName: TEdit;
    ebVacation: TEdit;
  ....
  private
    function GetStringValue(Index: Integer): string;
    procedure SetStringValue(Index: Integer; const Value: string);
  public
    property Name: string index 1 read GetStringValue write SetStringValue;
    property Vacarion: string index 2 read GetStringValue write SetStringValue;
  ....


function TSomeEditor.GetStringValue(Index: Integer): string;
begin
  case Index of
    1: Result := ebName.Text;
    2: Result := ebVacation.Text;
  else
     raise Exception.CreateFmt('Internal error: GetStringValue() index incorrect: %d', [Index]);
  end;
end

procedure TSomeEditor.SetStringValue(Index: Integer; const Value: string);
begin
  case Index of
    1: ebName.Text := Result;
    2: ebVacation.Text := Result;
  else 
     raise Exception.CreateFmt('Internal error: SetStringValue() index incorrect: %d', [Index]);
  end;
end;


PS: Говнокод, не проверял., только концепция.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649737
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

ebName.Text := Value; разумеется.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649987
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Спасибо!

Малёх непонятны пропиртя, правда.
Но покопаюсь.
...
Рейтинг: 0 / 0
Имя контрола на форме в переменной
    #39649998
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не занимайтесь ерундой. Для работы с БД используйте DB-контролы.
У вас на форме есть две таблицы с полем Summa. Вы два контрола обзавёте Summa ?
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Имя контрола на форме в переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]