delphi dbgrid用shift多选?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi dbgrid用shift多选?相关的知识,希望对你有一定的参考价值。

怎样才能使用shift键在dbgrid中进行连续多选?
dgMultiSelect已设为true!但是不能用shift?

参考技术A 在其Options属性里,将dgMultiSelect设为true就可以了!

怎样实现在DBGrid中双击选择整行,并且可以多选?谢谢!!

DBGrid1->Options里有个dgMultiSelect,把它设为true就能多选了

 

先设置DBGrid1->options中dgRowSelect = true, dgMultiSelect = true。
接着写按下面的写。
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
  keybd_event(VK_CONTROL,0,0,0);   //模拟按下CTRL键
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if(Button==mbRight) //右键取消多选;
  {
    keybd_event(VK_CONTROL,0,2,0);  //模拟放开CTRL键
  }
}

 

可以实现,不过尚不完美。
在cell点击时选择编辑,在dblclick时为整行选定。代码如下:

void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
        TDBGridOptions options = DBGrid1->Options ;
        DBGrid1->Options = options << dgRowSelect;

}

void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
        TDBGridOptions options = DBGrid1->Options ;
        DBGrid1->Options = options >> dgRowSelect;
        DBGrid1->Options = options << dgEditing;
}

这样在每行双击时为整行选取,之后点击每行的非dgTitle部分均为每行选取,点击cell时为可编辑,单格选取。

 

procedure TForm1.FormDblClick(Sender: TObject);
begin
  ShowMessage(双击);
end;

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  {
  DBGrid1.DataSource.DataSet.DisableControls;
  DBGrid1.DataSource.DataSet.First;
  DBGrid1.SelectedRows.CurrentRowSelected := True;
  DBGrid1.DataSource.DataSet.EnableControls;
  }
  keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
  keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); //放开Ctrl键
   //keybd_event(VK_CONTROL,0,0,0);   //模拟按下CTRL键
    // ShowMessage(‘双击‘);
  //DBGrid1.DataSource.DataSet.GetBookmark()
  //DBGrid1.Options dgmultiselect
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
  begin
    DisableControls;
    First;
    while not Eof do
    begin
      DBGrid1.SelectedRows.CurrentRowSelected := True;
      Next;
    end;
    EnableControls;
  end;
end;

 
































以上是关于delphi dbgrid用shift多选?的主要内容,如果未能解决你的问题,请参考以下文章

DBGrid中Shift多选

delphi6,能否在DBGrid组件中,对某一列的单元格,添加下拉菜单,实现多选功能

请问如何在delphi中实现多选打印功能!

Delphi DBGrid记录移动问题!

delphi7 DBGrid 中怎么样使用多选删除二张不同的表?

delphi dbgrid筛选记录?