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
相关产品推荐
相关产品推荐

