delphi – 有没有办法找出TButtonGroup的哪个按钮被点击?
我的应用程序使用TButtonGroup控件.我为每个按钮分配一个事件处理程序:doClick.通过为每个按钮(指针(i))分配信息,我可以确定调用了哪个按钮.这是代码:
procedure TVector_Menu.Synchronize (rows,cols: Int32); var btn: TGrpButtonItem; i: Int32; begin ButtonGroup.Items.Clear; Self.Rows := rows; Self.Cols := cols; for i := 0 to rows * cols - 1 do begin btn := Buttongroup.Items.Add; btn.Data := Pointer (i); btn.ImageIndex := i; btn.OnClick := doClick; end; // for Self.ClientHeight := 4 + rows * ButtonGroup.ButtonHeight; Self.ClientWidth := 22 + cols * ButtonGroup.ButtonWidth; end; // Synchronize // procedure TVector_Menu.doClick (Sender: TObject); var btn: TGrpButtonItem; i,r,c: Int32; begin btn := (Sender as TGrpButtonItem); // @@@ TButtonGroup i := Int32 (btn.Data); get_rc (i,c); if Assigned (FOnClick) then FOnClick (Sender,@FButton_Matrix [r,c]); end; // doClick // 当调用doClick时,我在标有“@@@”的行上获得了一个无效的类型转换.当我使用TButtonGroup作为btn以及类型转换时,类型转换是正确的,但是这个不包含数据属性,并且无论如何都不会有太多用处. 作为测试,我为TButtonGroup控件分配了一个OnClick事件处理程序,我注意到当我单击一个按钮时,首先调用按钮事件处理程序,然后调用包含按钮事件处理程序的TButtonGroup. 问题:有没有办法找出TButtonGroup的哪个按钮被点击了? 在Windows 7/64上使用Delphi XE 解决方法
您得到一个无效的类型转换异常,因为Sender实际上是TButtonGroup而不是TGrpButtonItem.这意味着如果要使用TGrpButtonItem.OnClick,则需要为每个按钮使用不同的事件处理程序.
在您的情况下,您应该使用提供按钮索引的 但是,这里有一个潜在的缺陷,你需要确保避免. documentation指出:
换句话说,只有在没有为按钮组或按钮项分配OnClick事件处理程序时,才会触发OnButtonClicked事件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |