You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.4中如何在DateEdit的OnChange事件控制ListView按钮可见性

Delphi 10.4 动态ListView按钮可见性控制解决方案

实现思路

在edtTanggal的OnChange事件中,获取ListView项内txtSteam的文本值,根据值(1或0)切换对应btnCheck和btnUnchek的可见状态。由于是动态外观的ListView,需通过控件名称定位每个项内的目标控件。

代码实现

处理选中项的按钮状态(推荐)

若只需对当前选中的ListView项进行控制,使用以下代码:

procedure TYourForm.edtTanggalChange(Sender: TObject);
var
  LSelectedItem: TListViewItem;
  LSteamTextItem: TTextListItem;
  LCheckBtn: TTextButton;
  LUncheckBtn: TTextButton;
begin
  // 获取当前选中的ListView项
  LSelectedItem := ListView1.Selected;
  if not Assigned(LSelectedItem) then Exit;

  // 通过名称查找项内的控件
  LSteamTextItem := LSelectedItem.Objects.FindObjectT<TTextListItem>('txtSteam');
  LCheckBtn := LSelectedItem.Objects.FindObjectT<TTextButton>('btnCheck');
  LUncheckBtn := LSelectedItem.Objects.FindObjectT<TTextButton>('btnUnchek');

  // 确保所有控件都被正确找到
  if Assigned(LSteamTextItem) and Assigned(LCheckBtn) and Assigned(LUncheckBtn) then
  begin
    if LSteamTextItem.Text = '1' then
    begin
      LCheckBtn.Visible := False;
      LUncheckBtn.Visible := True;
    end
    else
    begin
      LCheckBtn.Visible := True;
      LUncheckBtn.Visible := False;
    end;
  end;
end;

处理所有ListView项的按钮状态

若需要对ListView中所有项的按钮进行统一控制,使用以下代码:

procedure TYourForm.edtTanggalChange(Sender: TObject);
var
  LItem: TListViewItem;
  LSteamTextItem: TTextListItem;
  LCheckBtn: TTextButton;
  LUncheckBtn: TTextButton;
begin
  // 遍历ListView所有项
  for LItem in ListView1.Items do
  begin
    LSteamTextItem := LItem.Objects.FindObjectT<TTextListItem>('txtSteam');
    LCheckBtn := LItem.Objects.FindObjectT<TTextButton>('btnCheck');
    LUncheckBtn := LItem.Objects.FindObjectT<TTextButton>('btnUnchek');

    if Assigned(LSteamTextItem) and Assigned(LCheckBtn) and Assigned(LUncheckBtn) then
    begin
      if LSteamTextItem.Text = '1' then
      begin
        LCheckBtn.Visible := False;
        LUncheckBtn.Visible := True;
      end
      else
      begin
        LCheckBtn.Visible := True;
        LUncheckBtn.Visible := False;
      end;
    end;
  end;
end;

关键注意事项

  • 确保ListView项内的txtSteam、btnCheck、btnUnchek控件的Name属性与代码中使用的名称完全一致,否则FindObjectT无法定位到控件。
  • 加入Assigned判断避免空指针异常,防止因控件未正确创建导致的程序崩溃。
  • 如果是FireMonkey环境的动态ListView,需确保控件通过正确方式创建(如设计时的动态模板或代码中AddObject方法)。

内容的提问来源于stack exchange,提问作者Said

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:28:14