• Chủ Nhật, 21/12/2003 16:19 (GMT+7)

    Câu hỏi :
    Dùng VB.Net để tạo 1 menu từ thanh công cụ và có đặt phím nóng bằng dấu & (vd &File như trong VB6). Trong màn hình thiết kế nó không có vấn đề gì, nhưng khi chạy thì không còn thấy phím nóng nữa (không có dấu gạch chân phía dưới chữ cái)? • Khi tạo Panel, tôi muốn tạo 1 đồng hồ báo ngày tháng phía dưới cửa sổ chương trình, nhưng trong VB.Net hoàn toàn không giống như VB6, không khai báo Style trong lúc thiết kế, do đó tôi phải thêm đoạn lệnh như sau vào chỗ khai báo của form: Me.Name.Text = System.DateTime.Now.ToShortDate.String() Form hiển thị đồng hồ rất đúng, nhưng khi trở lại chế độ Form Design thì bị báo lỗi. Đưa dòng lệnh trên xuống phía hàm formMain_Load() thì không còn báo lỗi nhưng nó lại không cập nhật khi có sự thay đổi ngày/tháng. Xin cho biết cách khắc phục. • Làm thế nào để đóng gói toàn bộ chương trình để chạy trên máy khác không cài VB.Net.

    Trả lời :
     

    VB.Net có một số thay đổi so với version VB 6.0, 2 trong số đó liên quan đến câu hỏi của bạn:

    • VB.Net không còn dùng trình Menu Editor để tạo menu cho 1 ứng dụng VB mà cung cấp sẵn 1 đối tượng tên là “MainMenu”. Về tổng thể, đối tượng MainMenu hoạt động gần giống với menu của VB 6.0 nhưng về chi tiết thì có khác, thí dụ các ký tự chứa phím nóng trong các option menu không được hiển thị thường xuyên nữa, chỉ khi bạn nhấn và giữ phím Alt thì các ký tự miêu tả phím nóng mới được hiển thị có gạch chân rõ ràng để bạn dễ dàng nhấn phím nóng cần thiết. So với tập quán sử dụng cũ thì đây là một bất tiện.

    • Basic.Net vẫn có đối tượng StatusBar chứa nhiều Panel, mỗi Panel vẫn có thuộc tính Style, nhưng chỉ chứa 1 trong 2 giá trị: OwnerDraw và Text, không còn giá trị sbrTime để hiển thị đồng hồ thời gian thực như trong version VB 6.0. Do đó, để tạo 1 panel hiển thị đồng hồ thời gian thực, bạn hãy tạo 1 panel để hiển thị text bình thường, tạo 1 đối tượng Timer tên là Timer1 có thuộc tính Interval = 1000 (ms) rồi viết hàm xử lý sự kiện timeout cho Timer1 như sau:

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        StatusBar1.Panels.Item(0).Text = System.DateTime.Now.ToShortTimeString()

    End Sub

    Như vậy cứ 1s, Timer1 sẽ timeout 1 lần, hàm Timer1_Tick sẽ chạy và giá trị panel đồng hồ (chỉ số 0 trong danh sách Panel trong trường hợp này) sẽ được hiệu chỉnh lại theo giờ hệ thống.

    Để các ứng dụng được dịch bởi môi trường Visual Studio .Net có thể chạy trên máy khác, bạn cần cài Microsoft.NET FrameWork vào máy đó. Microsoft.NET FrameWork thường nằm trên đĩa CD trong bộ Visual Studio .Net.

    Chuyên mục: Lập trình