StringGrid格子里面可以放ComboBox吗
1个回答
2016-07-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517181
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
有两种方法
1.这个方法,其实ComboBox元件已在Form上,但先把Visible设成false,等到选到StringGrid的
Cells时,再将ComboBox绘在Cells上,但在ComboBox的onExit的事件要加上
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = ComboBox->Text,此时,
当你点选第二Col时,就会有ComboBox的出现,当你离开时,ComboBox的值就会在Cells里了...
这个方法,ComboBox元件并没有加到StringGrid元件里,两者是无关的....
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender,
int ACol, int ARow, bool &CanSelect)
{
ComboBox1->Visible=false;
if (ACol == 2)
{
TRect trtRect;
trtRect = StringGrid1->CellRect(ACol, ARow);
ComboBox1->Width = trtRect.Width();
ComboBox1->Height = trtRect.Height();
ComboBox1->Left = trtRect.left + StringGrid1->Left;
ComboBox1->Top = trtRect.Top + StringGrid1->Top;
ComboBox1->ItemIndex = 0;
ComboBox1->Visible=true;
ComboBox1->SetFocus();
}
}
2.这个方法,就是将ComboBox元件加到StringGrid内的Objects........
void__fastcall TForm1::StringGrid1SelectCell(TObject*Sender,int ACol, int ARow,bool &CanSelect)
{
TRect trtRect;
StringGrid1->Objects[Col][Row] =
new TComboBox((TComponent *)StringGrid1->Objects[Col][Row]);
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->Parent =
StringGrid1;
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->Width =
StringGrid1->ColWidths[Col];
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->Height =
StringGrid1->RowHeights[Row];
trtRect = StringGrid1->CellRect(Col, Row);
trtRect.Bottom = trtRect.Bottom;
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->BoundsRect = trtRect;
}
第一种方法的效能比较好...但还是得视个人的用途而定....
以上建议提供你参考
1.这个方法,其实ComboBox元件已在Form上,但先把Visible设成false,等到选到StringGrid的
Cells时,再将ComboBox绘在Cells上,但在ComboBox的onExit的事件要加上
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = ComboBox->Text,此时,
当你点选第二Col时,就会有ComboBox的出现,当你离开时,ComboBox的值就会在Cells里了...
这个方法,ComboBox元件并没有加到StringGrid元件里,两者是无关的....
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender,
int ACol, int ARow, bool &CanSelect)
{
ComboBox1->Visible=false;
if (ACol == 2)
{
TRect trtRect;
trtRect = StringGrid1->CellRect(ACol, ARow);
ComboBox1->Width = trtRect.Width();
ComboBox1->Height = trtRect.Height();
ComboBox1->Left = trtRect.left + StringGrid1->Left;
ComboBox1->Top = trtRect.Top + StringGrid1->Top;
ComboBox1->ItemIndex = 0;
ComboBox1->Visible=true;
ComboBox1->SetFocus();
}
}
2.这个方法,就是将ComboBox元件加到StringGrid内的Objects........
void__fastcall TForm1::StringGrid1SelectCell(TObject*Sender,int ACol, int ARow,bool &CanSelect)
{
TRect trtRect;
StringGrid1->Objects[Col][Row] =
new TComboBox((TComponent *)StringGrid1->Objects[Col][Row]);
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->Parent =
StringGrid1;
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->Width =
StringGrid1->ColWidths[Col];
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->Height =
StringGrid1->RowHeights[Row];
trtRect = StringGrid1->CellRect(Col, Row);
trtRect.Bottom = trtRect.Bottom;
dynamic_cast<TWinControl *>(StringGrid1->Objects[Col][Row])->BoundsRect = trtRect;
}
第一种方法的效能比较好...但还是得视个人的用途而定....
以上建议提供你参考
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询