IN TMS字符串网格我曾经用它来将弹出菜单的标题粘贴到网格的单元格中:
var
s:string;
begin
s:=(Sender as TmenuItem).Caption;
s:=stringReplace(s,'&','',[rfReplaceAll]);
with AdvStringGrid1 do
Cells[Col,Row]:=s;
我以前从未在cxGrid中使用过这个,所以我对此完全陌生。我已将cxGridpopUpMenu1链接到我的网格,添加了一个经典的PopUpMenu,因此它被cxGridpopUpMenu1使用,在弹出菜单中添加了一些项目,就是这样。弹出菜单在网格中右键单击确定,但是如何将menuitem的值粘贴到单元格中? +有没有办法将popopmenu分配给特定的列?
答案 0 :(得分:0)
这可以通过组合两个事件处理程序来完成:
OnPopUp
的{{1}}处理程序。TcxGridPopupMenu
处理程序。我们的想法是使用OnClick
存储对项目(列)的引用并记录单击,而OnPopup
会将值应用于单元格。
代码如下:
OnClick
正如@DavidHeffernan建议的那样,请注意使用//in private section of your form
fItem: TcxCustomGridTableItem;
fRec: TcxCustomGridRecord;
procedure TForm1.cxGridPopupMenu1Popup(ASenderMenu: TComponent;
AHitTest: TcxCustomGridHitTest; X, Y: Integer; var AllowPopup: Boolean);
begin
if AHitTest is TcxGridRecordCellHitTest then
begin
fItem := TcxGridRecordCellHitTest(AHitTest).Item;
fRec := TcxGridRecordCellHitTest(AHitTest).GridRecord;
end;
end;
procedure TForm1.MenuItem1Click(Sender: TObject);
var
s : string;
begin
s := (sender as tmenuItem).Caption;
gridView.DataController.Values[frec.Index, fitem.Index] := StripHotKey(s);
end;
从菜单标题中删除加速器字符标记。
答案 1 :(得分:0)
我这样做:
procedure TForm1.MenuItem1Click(Sender: TObject);
var
s: string;
begin
Assert(Sender is TMenuItem);
s := StripHotKey(TMenuItem(Sender).Caption);
cxGrid1TableView1.DataController.Edit;
cxGrid1TableView1.Controller.FocusedColumn.EditValue := s;
end;