维护bcb6老程序时发现SaveDialog的一个小bug

不写程序好多年 2019-10-19 11:56:39

维护bcb6老程序时发现SaveDialog的一个小bug:

如果点击了SaveDiog1列表中的一个文件,然后重新输入文件名,则SaveDialog1CanClose事件中,SaveDiog1->FileName还是鼠标点击的文件名。OpenDialog也是。用cb10.2测试没有这个问题。

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SaveDialog1->Execute() ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender,
bool &CanClose)
{
ShowMessage("选中的文件名为:\n" + SaveDialog1->FileName ); //这里的FileName 还是点击的文名,无论后来是否修改
}
//---------------------------------------------------------------------------




我想到的解决办法是: SaveDialog1CanClose不进行保存操作,只增加一个可以保存的判断标记,保存操作放在SaveDialog1->Execute() ; 之后。
...全文
159 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2019-10-30
  • 打赏
  • 举报
回复
只有Execute成功以后才能返回正确的文件名。
  • 打赏
  • 举报
回复
[quote=引用 1 楼 ooolinux 的回复:]

是的
ooolinux 2019-10-20
  • 打赏
  • 举报
回复
Execute opens the Save As dialog, returning true when the user selects a file name and clicks Save. If the user cancels the save operation, Execute returns a false value. if (SaveDialog1->Execute()) Memo1->Lines->SaveToFile(SaveDialog1->FileName); if判断一下不是更方便。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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