200分!一个不太好意思问的问题。

Canvas 2002-07-29 06:15:41
N个文件,用对话框一次全部打开,如何在主窗体里动态生成N个窗口?全部最大化。
因为每个文件有M个互不相干的数据区域,所以想在子窗口里动态生成M个TabSheet存放它(里面放一个Grid和一个Chart)。
*************
我也见过一些,可我对窗体子窗体总是不大了然,编出来的不是这有问题就是那有问题,很苦恼。
************
想请各位大侠以我的想法给我个类似的例子,
或者分开讨论也可以:
1,子窗体的动态生成。
2,TabSheet的动态生成。
3,Grid和Chart如何获得数据。
*************
相信问题一点都不难,本人就是想得到一个比较“系统”的答复,
算是补补编程基础。
希望大家别闲麻烦啊,嘿嘿。
剩下一百分我会另立帖子给热心大侠!
...全文
77 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Canvas 2002-07-31
  • 打赏
  • 举报
回复
好,我再仔细研究一下。谢谢各位这么关心。
接分
CDog 2002-07-30
  • 打赏
  • 举报
回复
想知道
Canvas 2002-07-30
  • 打赏
  • 举报
回复
up,
这么快就被挤出去了%¥……
Canvas 2002-07-30
  • 打赏
  • 举报
回复
很感兴趣,请教大侠具体实现方法。
gfh21cn 2002-07-30
  • 打赏
  • 举报
回复
我想可以用另外一种思路
不一定要TabSheet。


你重载Form的CreateParams,把父窗体指向某个窗体,可以做到象TabSheet的效果。

Bird1945 2002-07-30
  • 打赏
  • 举报
回复
如果你在子窗口中用了, Action=caFree;
那就可以去掉主窗口中的 TList * List;


//动态生成 TTabSheet页;
TTabSheet *pPage = new TTabSheet(this);
i ++ ;
pPage->Tag = i;
//PageControl1为手工加的一个控件.
pPage->PageControl = PageControl1;
//为动态生成的控件添加事件.
pPage->OnShow = TabSheet1Show;

void __fastcall TForm2::TabSheet1Show(TObject *Sender)
{
TTabSheet *pPage;
//找到发消息的那个pPage;
pPage = (dynamic_cast<TTabSheet*>(Sender));
//通过Tag可以知道是哪一个TTabSheet的事件发生了.
ShowMessage( pPage->Tag );

}

Bird1945 2002-07-30
  • 打赏
  • 举报
回复
//主窗口中的代码:

TList * List;
int i=0;
void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
//动态生窗口
Form2 = new TForm2(Owner);
//用于对窗口的区别
Form2->Tag = i;
//记下所有动态生成的窗口
List->Add(Form2);
//使他最大化;
Form2->WindowState = wsMaximized ;
//显示动态生成的窗口
Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
List = new TList;
//设置为父窗口;
this->FormStyle = fsMDIForm;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//删除所有的窗口;
TForm2 *Form2;
for(int i=0;i<List->Count;i++)
{
Form2 = (TForm2*)List->Items[i];
delete Form2;
}
delete List;
}
Bird1945 2002-07-30
  • 打赏
  • 举报
回复
写好了一个,怎样发给你?
Canvas 2002-07-30
  • 打赏
  • 举报
回复
插入一条问题:
我在子窗体里设置WindowState=wsMaximized;
在onclose事件里写入:Action=caFree;
动态生成子窗体后关闭最外面的子窗口,其他的窗口都是小窗口(就是可以最大化的那种),
怎么让这些窗口都是最大化呢。
Canvas 2002-07-30
  • 打赏
  • 举报
回复
如何在动态生成的子窗口上动态生成tabsheet呢?
firestars 2002-07-30
  • 打赏
  • 举报
回复
可以用子窗体的方式,实际上非常容易的

if(OpenDialog1->Execute())
{
for(int i=0;i<OpenDialog1->Files->Count;i++)
{
TForm2 *frm =new TForm2(this);
frm->Show();

frm->Caption=ExtractFileName(OpenDialog1->Files->Strings[i]);
}
}

上面是一个简单的代码,不过你要把主窗口的formstyle设为fsMDIform,然后再新建一个窗口,就是上面的TForm2,formstyle设为fsMDICHild;再访一个opendialog框到窗体上,把options的中的ofAllowMutipleSelected设为true,在多选文件的时候就可以了,上面的代码仅仅是把每个文件名显示到了caption上,你完全可以在这个基础上干其它的事情

Canvas 2002-07-30
  • 打赏
  • 举报
回复
我想做的那个东西界于Bird1945(老唬是女人!)大侠说的两者之间。
许多MIDI子窗口(像VC那个样子),
每个窗口内又包含几个可以用TabSheet来翻页的页(像BCB的IDE界面一样)。
我说的不知道清楚没有。
N个文件保证会打开N个MIDI窗口,
而每个文件里面可以分成几块来显示,所以就要在子窗口内部来翻页了。


Canvas 2002-07-30
  • 打赏
  • 举报
回复
to:Bird1945(老唬是女人!)
那该?……
Canvas 2002-07-30
  • 打赏
  • 举报
回复
huzhangyou(信仰)大哥:
metalwing(铁翼)大哥:
把你们的想法变成个具体程序发给我好吗?ahai-ahai@263.net
难为你们了。
Bird1945 2002-07-30
  • 打赏
  • 举报
回复
呵呵,

你是不是要做成象bcb 的IDE那种样子啊?

有多个窗口打开多个文件 ,用TabSheet来翻页啊?
还是许多MDI窗口?象VC6那样?

我见议你最好不要
"用对话框一次全部打开,如何在主窗体里动态生成N个窗口?全部最大化。"
这样会使程序启动很慢的,最好是到要用时候再生成.


metalwing 2002-07-30
  • 打赏
  • 举报
回复
TMyForm 是你的子窗体类,TMyFormList时你的子出题实例链表,当你点击主窗体上一个按钮时,增加一个子窗体。写得不全,应该差不多吧。
void __fastcall BtnClick(...)
{
Add();
}
void __fastcall Add()
{
TMyFormList *temp;
temp = MyFormList->Last;
temp->Next = new TMyForm(Application);
temp->Next->Caption = NewCaption();
MyFormList->Last = temp->Next;
}
Canvas 2002-07-30
  • 打赏
  • 举报
回复
ahai-ahai@263.net
有的话就发给我,
我的BCB例子没了,手头什么资料也没有。
有没有其他的例子
你们有的就发我一份,
现在看你们的留言我更急了,
感觉自己彻底什么也不知道了。
huzhangyou 2002-07-30
  • 打赏
  • 举报
回复
你可以用一个结构
结构中包含这个窗体
再在一个对话框打开的时候
创建他们
有多少个就开多少个

参考参考吧
我觉得可以
Canvas 2002-07-30
  • 打赏
  • 举报
回复
象Bird1945(老唬是女人!) 大侠说过的:
有时看书也不明白,一定要有个源代码才明白,就是一些很简单的问题.

所以我也很想要一个比较详细的的源码看看。
metalwing 2002-07-30
  • 打赏
  • 举报
回复
不是很明白。
BCB不是有多窗体开发实例吗?
用一个链表或数组存储窗体实例,想要几个就生成几个不就完了吗?
Tab好像也差不多吧
加载更多回复(7)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧