Hiển thị kết quả từ 1 đến 10 / 10
  1. #1
    Tham gia
    16-05-2003
    Location
    HaNoi
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts

    [Q] Hỏi về instance của form

    Trong vb.net khi mà tớ gọi một form thì tớ thường dim new một instance của form (Tớ có 1 button để gọi một form). Nhưng nếu thế thì mỗi lần clik button nó lại gọi một form mới, bây giờ tớ phải làm sao để khi clik button thì nó sẽ chỉ gọi form nếu như form đấy chưa chạy còn nếu form đã được gọi rồi thì nó active lại form đấy
    Quote Quote

  2. #2
    Tham gia
    16-07-2002
    Location
    Ha Noi
    Bài viết
    1,218
    Like
    0
    Thanked 0 Times in 0 Posts
    Dim frm2 As Form2

    trong sự kiện click:
    Code:
    if frm2 Is Nothing Then
      frm2 = New Form2()
      frm2.Show()
    Else
      frm2.Show()
    End If

  3. #3
    Tham gia
    16-05-2003
    Location
    HaNoi
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts
    Cách này không ổn lắm bạn ạ vì:
    nếu để như thế này thì không chạy được nó vẫn gọi nhiều cửa sổ
    --------------------------------------------------------
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim frm2 As New Form2()
    If frm2 Is Nothing Then
    frm2 = New Form2()
    frm2.Show()
    Else
    frm2.Show()
    End If
    End Sub
    ---------------------------------------------
    Nếu khai báo biến frm2 là public thì nếu tắt form2 đi sau đó clik button thì sẽ gặp lỗi sau:
    Cannot access a disposed object named "Form2".

  4. #4
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    Code:
    ...
    Dim frm2 As New Form2()
    If frm2 Is Nothing Then
        frm2 = New Form2()
        frm2.Show()
    Else
        frm2.Show()
    End If
    ...
    chẳng trách code snippet này sẽ tạo ra nhiều windows vì frm2 là local variable --> đoạn condition frm2 Is Nothing luôn False

    trường hợp bạn đưa frm2 ra thành public member : khi bạn close frm2 cũng là lúc frm2.Dispose() được invoke --> frm2 dọn sạch resource của nó rồi. Mà khi đó, frm2 Is NOT Nothing --> đoạn condition frm2 Is Nothing sẽ là False --> frm2.Show() sẽ tặng bạn một run-time error to tướng vì frm2 disposed rồi, chả còn gì mà show với hide.

    nếu tôi nhớ không lầm thì class Form có property .Closed. Bạn có thể thay điều kiện frm2 Is Nothing thành frm2.Closed.

  5. #5
    Tham gia
    16-05-2003
    Location
    HaNoi
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts
    frm2 không có thuộc tính nào là closed cả.

  6. #6
    Tham gia
    04-06-2003
    Bài viết
    13
    Like
    0
    Thanked 0 Times in 0 Posts
    Bạn đang xử lý form ở đang mdi hay sao.
    Nếu thế thì khi new một instance ta gan luôn cho nó một key, ta có thể gan cho thuộc tính Tag của instance đó. Sau này dựa vào thuộc tính này mà ta có thể Activate hay new một instance mới.

  7. #7
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    thì đại khái ý tưởng là .Closed, bạn nên từ "ý tưởng" đó mà nghiên cứu tra MSDN chứ. Tôi đã tra MSDN online và kết quả : property đó có tên là .IsDisposed.

  8. #8
    Tham gia
    16-05-2003
    Location
    HaNoi
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts
    OK cảm ơn mọi người đã giúp đỡ

  9. #9
    Tham gia
    12-10-2002
    Location
    HCM
    Bài viết
    96
    Like
    0
    Thanked 0 Times in 0 Posts
    Có 1 cách khác nếu bạn sử dụng MDI và biết tên của form cần hiển thị:
    Dim frm As New Form()
    For Each frm In Me.MdiChildren()
    If frm.Name = "frmDatabaseServerSeting" Then
    frm.Activate()
    Exit Sub
    End If
    Next

  10. #10
    Tham gia
    04-06-2003
    Bài viết
    13
    Like
    0
    Thanked 0 Times in 0 Posts
    Đôi lúc chúng ta cũng cần phải instance nhiều hơn một bản của form. Ví dụ chúng ta có một form (chứa đối tượng Crytasl Report View) dùng để hiển thị các mẫu báo cáo của ta. Thì việc so sánh thuộc tính name là không tiện

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •