-1

在 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 分配给特定的列?

4

2 回答 2

0

这可以结合两个事件处理程序来完成:

  • OnPopUp您的TcxGridPopupMenu.
  • OnClick所有弹出菜单项的处理程序。

这个想法是使用OnPopup来存储对项目(列)的引用并单击记录,而OnClick将值应用于单元格。

代码如下:

//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;

正如@DavidHeffernan 建议的那样,请注意使用StripHotKey它会从菜单标题中删除加速器字符标记。

于 2014-03-11T08:26:14.307 回答
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;
于 2014-03-11T10:25:31.467 回答