NX Lab

C#: gọi một hộp thoại Block UI Styler từ add-in và đọc giá trị sau khi người dùng bấm OK

#C##Block UI Styler1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Block UI Styler có thể sinh sẵn mã C# gồm lớp hộp thoại với các callback. Bài này tóm tắt cấu trúc lớp mẫu do công cụ sinh ra và chỗ nào bạn viết logic của mình.

    C#: gọi một hộp thoại Block UI Styler từ… C#: gọi một hộp thoại Block UI Styler từ…

    Các bước thực hiện

    1. Thiết kế dialog. Lưu file .dlx cùng thư mục output.
    2. Chọn ngôn ngữ C#. Block UI Styler sinh file .cs, phần được phép sửa nằm trong các hàm callback.
    3. Viết logic trong callback. update_cb, apply_cb, ok_cb.
    4. Gọi hộp thoại. Từ Main khởi tạo lớp và Show().
    5. Giải phóng. Dispose trong finally.

    Code tham khảo (C#)

    using System;
    using NXOpen;
    using NXOpen.BlockStyler;
    
    public class HopThoaiMau
    {
        private Session theSession;
        private UI theUI;
        private BlockDialog theDialog;
        private IntegerBlock soCot;
        private DoubleBlock buoc;
    
        public HopThoaiMau()
        {
            theSession = Session.GetSession();
            theUI = UI.GetUI();
            theDialog = theUI.CreateDialog("nxlab_dialog.dlx");
            theDialog.AddUpdateHandler(new BlockDialog.Update(update_cb));
            theDialog.AddOkHandler(new BlockDialog.Ok(ok_cb));
            theDialog.AddInitializeHandler(new BlockDialog.Initialize(initialize_cb));
        }
    
        public static void Main(string[] args)
        {
            HopThoaiMau h = null;
            try
            {
                h = new HopThoaiMau();
                h.theDialog.Show();
            }
            catch (Exception ex)
            {
                Session.GetSession().ListingWindow.Open();
                Session.GetSession().ListingWindow.WriteLine("Lỗi: " + ex.Message);
            }
            finally
            {
                if (h != null) h.theDialog.Dispose();
            }
        }
    
        public void initialize_cb()
        {
            soCot = (IntegerBlock)theDialog.TopBlock.FindBlock("integer_cot");
            buoc = (DoubleBlock)theDialog.TopBlock.FindBlock("double_buoc");
            soCot.Value = 4;
            buoc.Value = 10.0;
        }
    
        public int update_cb(UIBlock block)
        {
            return 0;
        }
    
        public int ok_cb()
        {
            ListingWindow lw = theSession.ListingWindow;
            lw.Open();
            lw.WriteLine("Số cột = " + soCot.Value + ", bước = " + buoc.Value);
            return 0;
        }
    
        public static int GetUnloadOption(string dummy)
        {
            return (int)Session.LibraryUnloadOption.Immediately;
        }
    }
    

    Giải thích code

    • Mỗi callback là một hàm công khai; đăng ký bằng new BlockDialog.Update(update_cb) và các delegate tương ứng.
    • Phép ép kiểu (IntegerBlock) cần thiết vì FindBlock trả về UIBlock chung.
    • Trả về 0 từ callback nghĩa là xử lý bình thường.

    Lỗi thường gặp

    • File .dlx phải nằm cùng thư mục với DLL (hoặc trong thư mục application) để CreateDialog("tên.dlx") tìm thấy.
    • Đổi Object Name trong Block UI Styler mà không sửa code C# làm FindBlock trả null.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.