首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

帮小弟我看看这个代码,ShowMessage显示信息为什么都要显示两次

2012-03-20 
帮我看看这个代码,ShowMessage显示信息为什么都要显示两次?比如,从E盘换到光盘K盘,ShowMessage信息就会显

帮我看看这个代码,ShowMessage显示信息为什么都要显示两次?
比如,从E盘换到光盘K盘,ShowMessage信息就会显示两次,而从K盘再换到K盘,ShowMessage就显示一次,为什么?

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

void __fastcall TForm1::DriveComboBox1Change(TObject *Sender)
{
  DetectIfHasCDonCDROM(DriveComboBox1->Drive); //检测光驱中是否有光盘  
}

//---------------------------------------
void __fastcall TForm1::DetectIfHasCDonCDROM(int drive)
//检测光驱中是否有光盘
{
  AnsiString Drive=AnsiString(char(drive))+":\\";
  if (GetDriveType(Drive.c_str())==DRIVE_CDROM)
  {
  SetErrorMode(SEM_FAILCRITICALERRORS);
  if(DiskSize(drive-96)==-1)
  {
  ShowMessage("There is no CD in the CD-ROM drive "+AnsiString(char(drive))+"! Please insert a CD in it.");
  SetErrorMode(SEM_FAILCRITICALERRORS);
  }
  }
}
//---------------------------------------


[解决办法]
DetectIfHasCDonCDROM可能执行了两次,你设断点运行看看就知道了
[解决办法]
TDriveComboBox是win3.1的控件.用于早期的windows(windows 3.X版本.它在win95之前)或为了与以前版本兼容而设计的,你现在在xp以上版本用,会有问题的
你最好用普通的TComboBox替代它,如果一定要用,在里面加程序处理吧


[解决办法]
从E盘换到光盘K盘,DriveComboBox1Change执行了两次,
ShowMessage信息就会显示两次;

而从K盘再换到K盘,DriveComboBox1Change执行了一次,
ShowMessage就显示一次;
[解决办法]
按你上面的程序,程序启动都会执行一次的,你可这样改:

void __fastcall TForm1::DriveComboBox1Change(TObject *Sender)
{
static int oldd=DriveComboBox1->Drive;
if (oldd!=DriveComboBox1->Drive)
{
oldd= DriveComboBox1->Drive;
DetectIfHasCDonCDROM(DriveComboBox1->Drive); //检测光驱中是否有光盘
 }
}


[解决办法]
这个与你的代码无关,是void __fastcall TForm1::DriveComboBox1Change(TObject *Sender)
这个事件引起的
[解决办法]

探讨

按你上面的程序,程序启动都会执行一次的,你可这样改:

void __fastcall TForm1::DriveComboBox1Change(TObject *Sender)
{
static int oldd=DriveComboBox1->Drive;
if (oldd!=DriveComboBox1->Drive)
{
oldd= DriveComboBox1->D……

[解决办法]
关注下。

热点排行