admin 发表于 2017-12-30 22:46:34

CATIA二次开发入门教程28-PLM之家注册系统学习开发之MultiList

CATIA二次开发入门教程28-PLM之家注册系统学习开发之MultiList
此控件的功能是将前面的信息通过列表的形式展示出来,最重要的是对信息的判断的同时,对删除和导出button的可用性进行处理,点击添加信息按钮,结果如下,如果发现重名或者信息不符合会进行报错!




//-------------------------------------------------------------------------
void PLMHomeRegeditFunctionCmdDlg::OnPushButtonAddInfoPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
{
    //Add information

        CATUnicodeString oCellContents;
        ////////////////判断是否所有的信息都填写
        if(_EditorName->GetText()=="")
        {
                PrintMessage("请完善用户名信息!");
                return;
        }
       if(_RadioButtonMale->GetState()!=CATDlgCheck && _RadioButtonFemale->GetState()!=CATDlgCheck)
        {
                PrintMessage("请完善性别信息!");
                return;
        }
       if(_CheckButtonCAA->GetState() != CATDlgCheck && _CheckButtonNXOpen ->GetState()!= CATDlgCheck && _CheckButtonTC->GetState()!=CATDlgCheck)
        {
       
                PrintMessage("请完善科目信息!");
                return;
        }
       if( _EditorTel->GetText().GetLengthInChar() != 11)
        {
               
                PrintMessage("请完善电话信息!");
                return;
        }
        //////////////判断是否有相同的名字已经添加在MultList中
       bool isIn = false;
        for(int i=0;i<_MultiListInfor->GetLineCount();i++)
        {       
                _MultiListInfor->GetColumnItem(0, oCellContents,i);
                if(oCellContents==_EditorName->GetText())
                {
                        PrintMessage("同名存在,请重新输入!");
                        isIn = true;
                        break;
                }
        }

          if (isIn)
          {
                  return;
          }
          else       
          {
                ///////////将收集到要添加的信息放在ColumnTitles中,
                CATUnicodeString ColumnTitles;
                //收集姓名信息
                ColumnTitles=_EditorName->GetText();                               
          //收集性别信息
                if(_RadioButtonMale->GetState()==CATDlgCheck)                //收集性别信息
                        ColumnTitles="男";
                else if(_RadioButtonFemale->GetState()==CATDlgCheck)
                        ColumnTitles="女";
          //获取年龄
                CATUnicodeString iAgeText;
                  _ComboAge->GetLine(iAgeText,_ComboAge->GetSelect());
               ColumnTitles =iAgeText;
               //获取电话
               ColumnTitles =_EditorTel->GetText();
               //获取时长
               char msg;
               int tempInt = (int)(_SpinnerTime->GetCurrentValue());
               itoa(tempInt,msg,10);
                CATUnicodeString iTimeText = CATUnicodeString(msg);
               ColumnTitles = iTimeText;
         //收集学科信息
      CATUnicodeString iText;                       
               if (_CheckButtonCAA->GetState() == CATDlgCheck)
               {
                        iText += _CheckButtonCAA->GetTitle();
               }

               if (_CheckButtonNXOpen->GetState() == CATDlgCheck)
               {
                        iText +=_CheckButtonNXOpen->GetTitle();
               }

               if (_CheckButtonTC->GetState() == CATDlgCheck)
               {
                        iText += _CheckButtonTC->GetTitle();
               }


                ColumnTitles = iText;

                ///////////在MultiLIst中添加信息用到的函数是SetColumnItems
                _MultiListInfor ->SetColumnItems(0,&ColumnTitles,1,-1,CATDlgDataAdd);
                _MultiListInfor ->SetColumnItems(1,&ColumnTitles,1,-1,CATDlgDataAdd);
                _MultiListInfor ->SetColumnItems(2,&ColumnTitles,1,-1,CATDlgDataAdd);
                _MultiListInfor ->SetColumnItems(3,&ColumnTitles,1,-1,CATDlgDataAdd);
                _MultiListInfor ->SetColumnItems(4,&ColumnTitles,1,-1,CATDlgDataAdd);
                _MultiListInfor ->SetColumnItems(5,&ColumnTitles,1,-1,CATDlgDataAdd);

                _PushButtonDelete->SetSensitivity(CATDlgEnable);
       _PushButtonExport->SetSensitivity(CATDlgEnable);
        }
}

admin 发表于 2017-12-30 22:51:37

接下来时删除按钮,删除可以选中的列进行删除操作

//-------------------------------------------------------------------------
// Callback on PushBActivate of _PushButtonDelete
//-------------------------------------------------------------------------
void PLMHomeRegeditFunctionCmdDlg::OnPushButtonDeletePushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
{

        //删除选中行

        CATBool RowIsSelected;
        for(int i=0;i<_MultiListInfor->GetLineCount();i++)
        {
                RowIsSelected = _MultiListInfor->IsSelect(i);                        //找到那个被选中的行
                if(RowIsSelected ==TRUE )
                {
                        _MultiListInfor->ClearLine(i);                                        //删除行
                }
        }


if(_MultiListInfor->GetLineCount() == 0)
{
        _PushButtonDelete->SetSensitivity(CATDlgDisable);
        _PushButtonExport->SetSensitivity(CATDlgDisable);
}
else
{
        _PushButtonDelete->SetSensitivity(CATDlgEnable);
        _PushButtonExport->SetSensitivity(CATDlgEnable);
}
}





admin 发表于 2017-12-30 22:53:15

最后是导出功能,此处使用CATFileDlg 弹出对话框导出txt格式,此对话框点击ok后需要调用自己定义的回掉函数处理!



//-------------------------------------------------------------------------
// Callback on PushBActivate of _PushButtonExport
//-------------------------------------------------------------------------
void PLMHomeRegeditFunctionCmdDlg::OnPushButtonExportPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
{

        pDlgFile = new CATDlgFile(this,"导出文件",CATDlgFileSave);//弹出文件选择框
        pDlgFile->SetVisibility(CATDlgShow);       
        CATUnicodeString nameExtension = CATUnicodeString("txt files");//设置文件格式为txt
        CATString filterExtension = CATString("*.txt");
        pDlgFile->SetFilterStrings(&nameExtension, &filterExtension, 1);
        //getCurrentTime
        CATUnicodeString myTimeStr;
        CATTime myTime = CATTime::GetCurrentLocalTime();
        myTimeStr = myTime.ConvertToString("%Y%m%d%I%M%S");

        //fileName
        CATUnicodeString fileNameStr = "PLM之家培训导出信息表_" + myTimeStr;
        PrintMessage(fileNameStr);
        pDlgFile->SetFileName( fileNameStr);//设置文件默认名称为信息记录


        int iTypeOfInput = 0;
        //添加文件选择框确定按钮事件回调函数 ActOnOK
        AddAnalyseNotificationCB (pDlgFile,
                pDlgFile->GetDiaOKNotification(),
                (CATCommandMethod)&PLMHomeRegeditFunctionCmdDlg::ActOnOK,
                &iTypeOfInput);

}

void PLMHomeRegeditFunctionCmdDlg::ActOnOK(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
{
        CATUnicodeString fileName;
        pDlgFile->GetSelection(fileName);//获取选择的路径

        fileName=fileName+".txt";
        const char *filepath=fileName.ConvertToChar();
        ofstream outfile(filepath,ios::out|ios::trunc);//用c++的输出文件
        if(!outfile)       
        {
                PrintMessage("打开文件出错!");
                return;
        }
        outfile<<"姓名"<<"性别"<<"年龄"<<"电话"<<"时长"<<"学习科目          "<<endl;
        CATUnicodeString       name,gender,age,tel,time,subject;
        int ColumnNum=_MultiListInfor->GetLineCount();
        for(int i=0;i<ColumnNum;i++)
        {
                //获取MultiListInformation中的信息
                _MultiListInfor->GetColumnItem(0, name,i);
                _MultiListInfor->GetColumnItem(1, gender,i);
                _MultiListInfor->GetColumnItem(2, age,i);
                _MultiListInfor->GetColumnItem(3, tel,i);
                _MultiListInfor->GetColumnItem(4, time,i);
                _MultiListInfor->GetColumnItem(5, subject,i);
                //此处需要调整字符串的输出方式,使得txt格式整齐
                name.Resize(6,' ',0);
                gender.Resize(4,' ',0);
                age.Resize(4,' ',0);
                tel.Resize(11,' ',0);
                time.Resize(4,' ',0);
                subject.Resize(22,' ',0);
                outfile<<name<<" "<<gender<<" "<<age<<" "<<tel<<" "<<time<<" "<<subject<<" "<<endl;
        }
        pDlgFile->RequestDelayedDestruction();
        pDlgFile=NULL;
}

小李子 发表于 2018-2-21 18:15:52

,,,,,,,,,,,,,,,,,,,

plmme 发表于 2018-12-15 11:44:07

支持!!!!!!

visionace 发表于 2024-2-25 08:45:10

厉害了!!!
页: [1]
查看完整版本: CATIA二次开发入门教程28-PLM之家注册系统学习开发之MultiList