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,则需要为每个按钮使用不同的事件处理程序.在您的情况下,您应该使用提供按钮索引的TButtonGroup.OnButtonClicked
事件.
但是,这里有一个潜在的缺陷,你需要确保避免. documentation指出:
Occurs when a button is clicked,if the OnClick event is not present.
换句话说,只有在没有为按钮组或按钮项分配OnClick事件处理程序时,才会触发OnbuttonClicked事件.
总结以上是内存溢出为你收集整理的delphi – 有没有办法找出TButtonGroup的哪个按钮被点击?全部内容,希望文章能够帮你解决delphi – 有没有办法找出TButtonGroup的哪个按钮被点击?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)