0

dlg1 と dlg2 の 2 つのカスタム ダイアログがあります。ユーザーが dlg1 で [次へ] をクリックすると、テキストと [OK] ボタンを含む別のカスタム ポップアップ ダイアログが表示されます。ユーザーがこのポップアップで [OK] をクリックすると、dlg2 が表示されます。私は多くのことを試しましたが、最高のものは、dlg1 と OK-popup の上に dlg2 を表示するだけです。

4

2 に答える 2

3

最初のダイアログから 2 番目のダイアログにユーザーを渡すモーダル ダイアログを作成する必要があります。実際には、モーダル ダイアログを使用してメッセージを表示し、モーダル ダイアログが呼び出されたダイアログにフォーカスを戻します。インストーラーのルールに違反しているかどうかはわかりません。呼び出し元のダイアログにフォーカスを戻さずに動作しているように見える場合:

dlg1 のコード:

<UI>
  <Dialog Id="dlg1" ...>
    <Control Id="firstText" Type="Text" X="10" Y="10" Width="200" Height="17" Text="First Dialog calls Modal Dialog." />
    <Control Id="PopupButton" Type="PushButton" Text="Show Popup" Height="17" Width="56" X="100" Y="243" Default="yes">
      <Publish Event="SpawnDialog" Value="PopupDlg" />
    </Control>
  </Dialog>
</UI>

PopupDlg のコード:

<UI>
  <Dialog Id="PopupDlg" ...>
    <Control Id="OkButton" Type="PushButton" Text="{\Tahoma_Bold}OK" Height="17" Width="56" X="200" Y="175">
      <Publish Event="NewDialog" Value="dlg2" />
    </Control>
  </Dialog>
</UI>

dlg2 のコード:

<UI>
  <Dialog id="dlg2" ...>
    <Control Id="secondText" Type="Text" X="10" Y="10" Width="200" Height="17" Text="Now proceed." />
    <Control Id="CancelButton" Type="PushButton" Text="Cancel" Height="17" Width="56" X="180" Y="243">
      <Publish Event="EndDialog" Value="Exit" />
    </Control>
  </Dialog>
</UI>

更新 上記のソリューションを実装すると、いくつかの問題が発生します。ただし、回避策が 1 つありますが、コードが読みにくくなります。コードを投稿する前に、回避策の背後にある概念について説明します。基本的に、ポップアップをトリガーするダイアログとポップアップ自体の 2 つのダイアログしかありません。ポップアップでは、上記のように新しいウィンドウを開くのではなく、呼び出し元のダイアログにフォーカスを戻します。さらに、プロパティの状態を変更します。呼び出しダイアログは、モーダル ダイアログによって設定されたプロパティに基づいて更新されます。

この目標を達成するには、呼び出しダイアログの各状態にコントロールを追加する必要があります。1 つはプロパティが設定されている場合、もう 1 つはプロパティが設定されていない場合です。

呼び出しダイアログのコード:

<UI>
  <Dialog Id="callingDialog" ...>
    <Control Id="BeforePopup" Type="Text" X="10" Y="10" Width="200" Height="17" Text="Here is some text." Hidden="yes">
      <Condition Action="show"><![CDATA[NOT PROP_SET_BY_MODAL_DLG]]></Condition>
      <Condition Action="hide"><![CDATA[PROP_SET_BY_MODAL_DLG]]></Condition>
    </Control>
    <Control Id="AfterPopup" Type="Text" X="10" Y="10" Width="200" Height="17" Text="Popup was shown." Hidden="yes">
      <Condition Action="show"><![CDATA[PROP_SET_BY_MODAL_DLG]]></Condition>
      <Condition Action="hide"><![CDATA[NOT PROP_SET_BY_MODAL_DLG]]></Condition>
    </Control>
    <Control Id="PopupButton" Type="PushButton" Text="Show Popup" Height="17" Width="56" X="100" Y="243" Default="yes">
      <Publish Event="SpawnDialog" Value="PopupDlg" />
    </Control>
  </Dialog>
</UI>

PopupDlg のコード:

<UI>
  <Dialog Id="PopupDlg" ...>
    <Control Id="OkButton" Type="PushButton" Text="OK" Height="17" Width="56" X="200" Y="175">
      <Publish Property="PROP_SET_BY_MODAL_DLG" Value="1" Order="1">1</Publish>
      <Publish Event="EndDialog" Value="Return" Order="2">1</Publish>
    </Control>
  </Dialog>
</UI>
于 2013-10-28T18:13:03.497 に答える