关于TDBGridEh的问题!请赐教。

钞票搬运工 2017-07-19 10:43:55
如下过程为DBGridEh1中Columns[i]的按钮点击事件OnEditButtonClick。

procedure TAForm.DBGridEh1Columns4EditButtonClick( Sender: TObject; var Handled: Boolean);
var
begin

我想通过此过程中Sender对象获得当前DBGrideh1中所属的Columns[i]列对象的列号,
不知道用什么办法好?请大家赐教!谢谢!

end;
...全文
646 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueStorm 2018-07-01
  • 打赏
  • 举报
回复

Sender的类型是TEditButtonControlEh
而TDBGridEh类继承关系是:
TDBGridEh <- TCustomDBGridEh <- TCustomDBAxisGridEh <- TCustomGridEh <-
TCustomControlEh <- TCustomControl <- TWinControl <- TControl <-
TComponent <- TPersistent <- TObject
也就是说TDBGridEh不是TEditButtonControlEh的子类
因此TDBGridEh(Sender)这种转换肯定是不行的
lyhoo163 2018-06-30
  • 打赏
  • 举报
回复
这样就可以了:
procedure TMDI_1_1_Frm.DBGridEh1EditButtonClick(Sender: TObject);
var ColNo: Integer;
begin
ColNo:=TDBGridEh(Sender).Columns.Grid.Col;
ShowMessage(IntToStr(ColNo));
end;
BlueStorm 2018-06-30
  • 打赏
  • 举报
回复

procedure TForm1.DBGridEh1Columns0EditButtonClick(Sender: TObject;
var Handled: Boolean);
var
ColNo: Integer;
begin
//ColNo := (TDBGridEh(TEditButtonControlEh(Sender).Owner.Owner).Col);
ColNo := (TDBGridEh(TEditButtonControlEh(Sender).Parent.Parent.Parent).Col);
ShowMessage(IntToStr(ColNo)); //第1列显示1、第2列显示2, 类推...
end;
BlueStorm 2018-06-30
  • 打赏
  • 举报
回复

procedure TForm1.DBGridEh1Columns4EditButtonClick(Sender: TObject; var Handled: Boolean);
var
ColNo: Integer;
begin
ColNo := (TDBGridEh(TEditButtonControlEh(Sender).Owner.Owner).Col);
ShowMessage(IntToStr(ColNo)); //第1列显示1、第2列显示2, 类推...
end;
fengshengjie 2018-06-29
  • 打赏
  • 举报
回复
直接用 Grid.OnEditButtonClick 事件, 通过 Grid.SelectIndex 可以获取当前的Column, 如果你在这个Event中要自己处理避免Grid的DefaultAction,要记得将Column.EditButton.DefaultAction 设置为False;
钞票搬运工 2017-07-26
  • 打赏
  • 举报
回复
引用 3 楼 npkaida 的回复:
可将 Sender 强制转换为 TDBGridColumnEh。 例如要获取该列的字段名,可以: procedure TForm1.DBGridEh1Columns0EditButtonClick(Sender: TObject; var Handled: Boolean); begin ShowMessage((Sender as TDBGridColumnEh).FieldName); end;
如你所写报错“Invalid class typecast”
npkaida 2017-07-22
  • 打赏
  • 举报
回复
可将 Sender 强制转换为 TDBGridColumnEh。 例如要获取该列的字段名,可以: procedure TForm1.DBGridEh1Columns0EditButtonClick(Sender: TObject; var Handled: Boolean); begin ShowMessage((Sender as TDBGridColumnEh).FieldName); end;
钞票搬运工 2017-07-20
  • 打赏
  • 举报
回复
引用 1 楼 lyhoo163 的回复:
在DBGridEh的事件中,只要带入Column: TColumnEh参数,通过column.Index,知道第几列。
能具体一点吗? procedure TAForm.DBGridEh1Columns4EditButtonClick( Sender: TObject; var Handled: Boolean); var begin 在此过程中Sender 就不是一个TColumnEh类型的对象。 我用showmessage(sender.className)查了一下它是一个TEditButtonControlEh类型的参数,在ToolCtrlsEh单元中有过定义。 具体怎样写还请赐教!谢谢。 end;
lyhoo163 2017-07-19
  • 打赏
  • 举报
回复
在DBGridEh的事件中,只要带入Column: TColumnEh参数,通过column.Index,知道第几列。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧