cb高手进,可能对社区的大多数人都很难的问题

x123456x 2006-04-22 03:08:23
stringgrid的问题,如何把一列隐藏?

急需高手解惑
...全文
113 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaoshi0 2006-04-25
为什么非要用StringGrid来做?

你是做项目还是做考试题?

DBGrid是专门用来操作数据库的
  • 打赏
  • 举报
回复
StringGrid是不提供隐藏 如果想隐藏那用第三方控件 AdvStringGrid
它有HidRows RemoveRows等等
用StringGrid来实现要想别的办法 没现成属性
  • 打赏
  • 举报
回复
zyyoung 2006-04-25
找个东西挡住它,呵呵
  • 打赏
  • 举报
回复
he717 2006-04-25
“cb高手进,可能对社区的大多数人都很难的问题 ”,x123456x 有些小看社区的人了。
  • 打赏
  • 举报
回复
he717 2006-04-25
StringGrid 和 DrawGrid 对于行和类都没有提供隐藏功能(Visible),但我们可以通过如下手段实现。总共三个步骤:
(一)将需要隐藏的列的宽度设置为-1,不要设置为0,否则会显示一条竖线,还是能够看到。
(二)触发OnSelectCell事件,加入对隐藏列选择事件的处理。
(三)触发OnKeyDown时间,加入对键盘方向键(左、右键)的处理。

下面是示例代码:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int g_hide_col = 2; // 需要隐藏的列索引号

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
StringGrid1->ColWidths[g_hide_col] = -1; // 将列宽度设置为-1,将其隐藏。

for(int i=0; i<StringGrid1->ColCount; i++){
StringGrid1->Cells[i][0] = IntToStr(i);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(ACol == g_hide_col){
CanSelect = false; // 处理选择事件,如果选择了被隐藏的列,则取消选择。
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == VK_LEFT){ // 如果按键盘左键,则判断当前焦点是否在被隐藏列的右侧,如果是,则跳过被隐藏的列。
if(StringGrid1->Col == g_hide_col+1){
StringGrid1->Col = g_hide_col-1;
Key = 0;
}
}
if(Key == VK_RIGHT){ // 如果按键盘右键,则判断当前焦点是否在被隐藏列的左侧,如果是,则跳过被隐藏的列。
if(StringGrid1->Col == g_hide_col-1){
StringGrid1->Col = g_hide_col+1;
Key = 0;
}
}

}
//---------------------------------------------------------------------------
  • 打赏
  • 举报
回复
x123456x 2006-04-22
只能这样吗?
我看看

难道stringgrid不提供隐藏的功能?
  • 打赏
  • 举报
回复
lurel 2006-04-22
建立一个单元格和id的关系数组.
例如cell[1,x]->1
cell[2,x]->2

然后根据你点击的cell的单元格去查找具体的id.
  • 打赏
  • 举报
回复
x123456x 2006-04-22
TKS楼上的星星
不过要求就是用stringgrid 我也没法
  • 打赏
  • 举报
回复
lurel 2006-04-22
利用dbgrid来做不用stringgrid
  • 打赏
  • 举报
回复
x123456x 2006-04-22
我说的可能还不清楚

用stringgrid显示数据库的内容,每行记录都有一个id ,唯一的。
我不想显示这列。

ID列的作用是:我点击一行的时候,可以根据id判断它是那一行。
  • 打赏
  • 举报
回复
jspxnet 2006-04-22
stringgrid 数据保持在数组中,
stringgrid 要隐藏,从新输出一遍数据,就不输出隐藏重中数组的数据
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ Builder
加入

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2006-04-22 03:08
社区公告
暂无公告