powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
19 сообщений из 19, страница 1 из 1
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662230
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На две кнопки повесил два события: - на первую "..." - выбор из диалогового окна,
на вторую "x" - очистка контрола.
Первая работает хорошо - выбираешь значение из диалога, и оно подставляется в контрол (здесь: Взвешивание).
Но вторая очищает внутренние переменные, как и требуется, но сам контрол не очищает.
Многочисленными экспериментами было установлено, что если событие очищения вешаешь на кнопку ВНЕ контрола (на рисунке правая синяя стрелка), то контрол очищается нормально. Т.е. если событие инициировано изнутри контрола, он находится в фокусе, то он не очищается. Вышел из положение следующим образом: при нажатии этого крестика сначала принудительно смещаю фокус на соседний контрол, потом вызываю очищение - так работает. Но это "костыль". Можно ли как-то добиться правильной работы самого элемента tcxBarEditItem без таких танцев с бубном?
Код: 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.
procedure TfmTehnicProcess.actClearReportCodeExecute(Sender: TObject);
begin
  EditFindTehnicProcessName.SetFocus(); // принудительно уводим фокус на другой контрол, иначе не очищается
  FindReportCodeId := 0;
end;

procedure TfmTehnicProcess.SetFindReportCodeId(const Value: integer);
var
  q: TBISMySQLQuery;
begin
  FFindReportCodeId := Value;
  if FFindReportCodeId = 0 then
    begin
      EditFindReportCode.EditValue := '';
    end
  else
    begin
      q := TBISMySQLQuery.Create;
      try
        q.From('report_code', 'rc');
        q.Find(FFindReportCodeId);
        EditFindReportCode.EditValue := q.GetVal('report_code_name');
      finally
        q.Free;
      end;
    end;
  UpdateData;
end;


Первая кнопка "..." работает нормально только потому, что при ее нажатии вызывается диалоговое окно, и фокус, соответственно с контрола убирается.
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662241
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,
https://www.devexpress.com/Support/Center/Question/Details/Q255800/setting-and-clearing-the-tcxbaredititem-content
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
uses
  cxEdit;

procedure TForm2.cxBarEditItem1PropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  case AButtonIndex of 
    // ...
    1:
    begin
      TcxCustomEdit(Sender).EditValue := Null;
    end;
  end;
end;
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662400
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus, ну там же написано
// Only when the focus goes to another component the control's text is appears empty
TcxCustomEdit(Sender).EditValue := Null;

Я Null тоже прописывал, поведение не изменялось. Работало только тогда, когда фокус был вне компонента.
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662416
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем в этом примере написано, что компонент корректно отобразит изменения только, если он потеряет фокус. В примере все работает, но фокус ведь продолжает оставаться (курсор мигает внутри). Как это так?
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662450
AJi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJi
Гость
Попробуйте так:
Код: sql
1.
2.
TcxCustomEdit(Sender).EditValue := Null;
TcxCustomEdit(Sender).PostEditValue;
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662455
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladв этом примере написано, что компонент корректно отобразит изменения только, если он потеряет фокусТС-ом на том форуме
svnvladно фокус ведь продолжает оставаться (курсор мигает внутри). Как это так?и оставлено без изменений автором ответа
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662777
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus,

Вызывает ошибку
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662792
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

Не очевидно, как у вас вызывается actClearReportCodeExecute. На всякий: Using the Sender Parameter

Этот код для обработчика кнопки у самого компонента:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    object cxBarEditItem1: TcxBarEditItem
      Caption = 'New Item'
      Category = 0
      Hint = 'New Item'
      Visible = ivAlways
      PropertiesClassName = 'TcxButtonEditProperties'
      Properties.Buttons = <
        item
          Default = True
          Kind = bkEllipsis
        end>
      Properties.OnButtonClick = cxBarEditItem1PropertiesButtonClick
    end



Для "доступа снаружи"... что-нибудь вроде (ExpressBars 17.2.7):
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.Action2Execute(Sender: TObject);
begin
  cxBarEditItem1.SetFocus(); // чтобы "появился" Edit
  TcxBarEditItemControl(cxBarEditItem1.Links[0].Control).Edit.EditValue := Null;
end;
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39662800
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tusДля "доступа снаружи"К TcxCustomEdit
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663031
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus,
клево!
Вот так работает:
Код: pascal
1.
2.
3.
4.
procedure TForm1.Action2Execute(Sender: TObject);
begin
  TcxBarEditItemControl(cxBarEditItem1.Links[0].Control).Edit.EditValue := Null;
end;


даже без этого:
Код: pascal
1.
  cxBarEditItem1.SetFocus(); // чтобы "появился" Edit


Видимо фокус уже находится на нем, раз нажали его кнопку.
А зачем фокус, он разве без фокуса не способен присваивать значение?
И что такое Links[0].Control?
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663032
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663105
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladраз нажали его кнопку.В той версии, где проверял, "Inner"Edit'у присваивается nil после ухода фокуса, и на кнопки ButtonEdit'a не предусмотрено назначение экшенов... хотя, если, зачем-либо, вызывать ActionExecute из ButtonClick... )
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663117
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверить настройку AlwaysSaveText, по которой можно отключить/включить очистку текстового поля в баре при потере фокуса.
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663122
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tussvnvladраз нажали его кнопку.В той версии, где проверял, "Inner"Edit'у присваивается nil после ухода фокуса, и на кнопки ButtonEdit'a не предусмотрено назначение экшенов... хотя, если, зачем-либо, вызывать ActionExecute из ButtonClick... )
Дык, контрол с редактором создается динамически поверх бара только в момент фокусировки, до этого его просто не существует (InnerEdit = nil).
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663147
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiДык, ...Вроде того, потом подставляется из созданныхJaDiAlwaysSaveTextУ ТС'а до смены значения не доходитsvnvladLinks[0].ControlВ хелпе же)
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663174
shaposh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установите у соответсвующего tdxBarManager значение AlwaysSaveText в true
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663349
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shaposhУстановите у соответсвующего tdxBarManager значение AlwaysSaveText в true
Установлено.
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663350
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiДык, контрол с редактором создается динамически поверх бара только в момент фокусировки, до этого его просто не существует (InnerEdit = nil).
Визуально существует, а на самом деле не существует?
...
Рейтинг: 0 / 0
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
    #39663352
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле еще проверку на Nil надо делать, иначе, если это диалоговое окно и фильтр назначается извне, то происходит Access violation.
Код: pascal
1.
2.
if Assigned(TcxBarEditItemControl(EditFindReportCode.Links[0].Control).Edit) then
        TcxBarEditItemControl(EditFindReportCode.Links[0].Control).Edit.EditValue := Null;
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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