2011-08-04 29 views
5

Bị kẹt với hộp tổ hợp và tác vụ tùy chỉnh trong trình cài đặt WIX.Gọi hành động tùy chỉnh trong WIX khi thay đổi giá trị trong Combox

Tôi có hộp tổ hợp (thả xuống) chứa một vài giá trị. Tôi muốn hiển thị một số văn bản trên màn hình (duy nhất cho mỗi mục trong menu thả xuống) khi người dùng chọn một giá trị từ menu thả xuống này.

Trong .Net, chúng tôi có thể thực hiện điều này dễ dàng vì chúng tôi có các sự kiện khác nhau được xác định trước. Nhưng trong WIX tôi không thấy bất kỳ sự kiện nào như vậy.

Có ai đó phải đối mặt với cùng một vấn đề không? Hoặc có thể hướng dẫn tôi cách tôi có thể hoàn thành nó.

Trả lời

8

Trình cài đặt Windows (công nghệ cơ bản) không cho phép bạn làm như vậy. Theo nghĩa đen, nó không xuất bản bất kỳ sự kiện nào khi giá trị combobox (dropdown) thay đổi. Ví dụ: bạn sẽ phải thêm một nút để người dùng nhấp vào khi người đó thay đổi giá trị trong hộp tổ hợp ...

Hoặc, bạn có thể chuyển sang kỹ thuật EmbeddedUI (WiX elementMSI table), nhưng nó được nâng cao hơn nhiều ...

CẬP NHẬT: mẫu sử dụng nhấp chuột vào nút để cập nhật văn bản.

<UI> 
    ... 
    <ComboBox Property="WIX_VERSIONS"> 
    <ListItem Value="Windows Installer XML 3.0" /> 
    <ListItem Value="Windows Installer XML 3.5" /> 
    <ListItem Value="Windows Installer XML 3.6" /> 
    </ComboBox> 
    ... 
    <Dialog Id="MyCustomDlg"> 
    ... 
     <Control Id="ComboBoxMain" Type="ComboBox" X="10" Y="60" Width="300" Height="17" Property="WIX_VERSIONS" /> 
     <Control Id="ButtonMain" Type="PushButton" X="320" Y="60" Width="40" Height="17" Text="Show"> 
     <Publish Property="COMBOVALUEFORMATTED" Value="You've chosen the [WIX_VERSIONS] version of the toolset" /> 
     </Control> 
     <Control Id="LabelMain" Type="Text" X="10" Y="80" Width="360" Height="17" Property="COMBOVALUEFORMATTED" Text="[COMBOVALUEFORMATTED]" /> 
    ... 
    </Dialog> 
</UI> 

Nút đẩy có thể xuất bản nhiều sự kiện hơn, ví dụ như DoAction, được sử dụng để chạy tác vụ tùy chỉnh khi nhấp vào nút. Điều này có thể phù hợp hơn trong trường hợp của bạn.

+0

bạn có thể vui lòng cung cấp cho tôi một ví dụ không? –

+0

Tôi đã cập nhật câu trả lời của tôi với mẫu –

+0

điều này tôi biết, nhưng sử dụng một số công cụ bên ngoài hoặc cái gì khác tôi không thể đạt được wat i chính xác muốn? –

0

Có cách để thực hiện việc này trong WiX. Bạn chỉ cần sản xuất sự kiện đã thay đổi của riêng bạn.

Chúng tôi so sánh tình trạng DoAction của chúng tôi để sở hữu khác mà sẽ giữ trạng thái trước đó của Combobox - VIRTUALWEBSITEOLD

Thực hiện một hành động tùy chỉnh trong ComboBox khi già không bằng mới:

<Control Id="WebSite" Type="ComboBox" Width="180" Height="18" X="120" Y="48" ComboList="no" Property="VIRTUALWEBSITE"> 
     <Publish Event="DoAction" Value="LansaInitVirtualFolders"><![CDATA[VIRTUALWEBSITE <> VIRTUALWEBSITEOLD]]></Publish> 
    </Control> 

Sau đó, Hành động tùy chỉnh thực hiện so sánh giống như DoAction (có thể không bắt buộc) và sau đó lưu giá trị Combobox trong thuộc tính OLD.

Tstring wszWebsite = ReadProperty(_T("VIRTUALWEBSITE")); 
    Tstring wszWebsiteOld = ReadProperty(_T ("VIRTUALWEBSITEOLD")); 

    // If unchanged ignore request 
    if (wszWebsite == wszWebsiteOld) return true ; 

[Do Some stuff] 

    // Set the saved state of the combobox so we don't get called again until it changes 
    if (nResult == ERROR_SUCCESS || nResult == ERROR_NO_MORE_ITEMS) 
    { 
    WriteProperty(_T("VIRTUALWEBSITEOLD"), wszWebsite.c_str()); 
    } 

(Lưu ý:. Cũng cần phải sử dụng Twin Dialog Pattern nếu cập nhật, chẳng hạn, một điều khiển ListBox Nếu kiểm soát của bạn không cập nhật nhưng Next-Back DOES cập nhật nó, sau đó Twin Dialog Pattern sẽ đảm bảo nó cập nhật)

Các vấn đề liên quan