2010-12-14 41 views
3

Bonjour Je travaille avec wix pour créer une installation. J'ai besoin d'une boîte de dialogue personnalisée pour laisser l'utilisateur définir un port. Le dialogue a un contrôle de type MaskedEdit où il doit écrire le port. La propriété connectée au contrôle a une valeur par défaut définie. Le problème est que lorsque l'utilisateur appuie sur le bouton suivant, je voudrais m'assurer que le champ de port a une valeur ou lui montrer un avertissement. Le code pour le contrôle ressemble à ceci:Vérifiez si le contrôle MaskedEdit contient du texte

<Property Id="DataStoragePort">4323</Property> 

    <Dialog Id="DataStoragePortConfig" Width="370" Height="270" Title="CellaVision DM1 Setup"> 
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next"> 
    </Control> 
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back"> 
    </Control> 
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel"> 
     <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> 
    </Control> 

    <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Data Storage Configuration" /> 
    <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.InstallDirDlgBannerBitmap)" /> 
    <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> 
    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> 
    <Control Id="DSDescription" Type="Text" X="20" Y="60" Width="250" Height="13" NoPrefix="yes" Text="Enter the port that the Data Storage Service should run on" /> 
    <Control Id="DSPort" Type="Text" X="20" Y="80" Width="20" Height="13" NoPrefix="yes" Text="Port:" /> 
    <Control Id="DSText" Type="MaskedEdit" Text="#####" X="45" Y="78" Width="70" Height="14" Property="DataStoragePort" /> 
    </Dialog> 

et la manipulation de cliquez sur le bouton suivant ressembler à ceci:

 <Publish Dialog="DataStoragePortConfig" Control="Back" Event="NewDialog" Value="CustomizeDlg">1</Publish> 
    <Publish Dialog="DataStoragePortConfig" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 

mais sur le clic suivant, je voudrais vous assurer que le property DataStoragePort n'est pas une chaîne vide. Aucune suggestion? Cordialement Daniel

Répondre

2

Un contrôle d'édition masqué vide définit sa propriété à la chaîne de modèle avec des espaces au lieu de "#" et "?". Par exemple, si "Texte" est défini sur "#####", la valeur vide est

"  "
Si "Texte" est défini sur "### - ###", la valeur vide est
" - "

Dans votre cas vous pouvez utiliser cette condition:

DataStoragePort <> "  "
+0

merci. Cela fonctionne bien. Y a-t-il un moyen de supprimer les espaces vides de la propriété? Le port défini par l'utilisateur peut contenir seulement 3-4 numéros. –

+0

Vous pouvez essayer d'utiliser une action personnalisée (C++ DLL ou VBScript). Dans une DLL, vous pouvez utiliser les fonctions MsiGetProperty() et MsiSetProperty(). Dans VBScript, vous pouvez utiliser Session.Property ("PROPERTY_NAME"). –