帮我看看这个代码,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)
这个事件引起的
[解决办法]