Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Vị trí Show form thông qua Thread

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    23

    Mặc định Vị trí Show form thông qua Thread

    Mình có ý định hiện 1 form con trong quá trình form chính đang thực thi, và khi xong sẽ đóng form con lại. Và mình đã hiện được việc hiện form con lên và đóng lại thành công, vấn đề mình muốn đề cập ở đây là vị trí hiển thị của form con đó. Mình muốn vị trí là "Center Parent" nhưng ko hiểu sao khi hiện lên nó cứ luôn ở vị trí top left screen, mặc dù mình đã set ở design và cả code rồi mà ko được. Bạn nào biết chỉ giúp mình với nha. Mình code như sau :
    Code:
            private void displayProcess()
            {
                frmProcess frm = new frmProcess ();
                frm.StartPosition = FormStartPosition.CenterParent;
                frm.ShowDialog();
                Thread.Sleep(0);
            }
    
            private void Start()
            {
                Thread thread = new Thread(new ThreadStart(displayProcess));            
                thread.Start();
            }
    P/s: Hoặc có thể chỉ mình cách thực thi đa tiến trình, yêu cầu như trên mình đã có đề cập.
    Thanks all.

  2. #2
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    frm.ShowDialog(); -> frm.ShowDialog(this);

    Bạn thử xem sao.
    Vì bạn chạy form trên thread khác nên phải chỉ định owner như lệnh trên

    Tóm lại đơn giản hơn:
    private void displayProcess()
    {
    frmProcess frm = new frmProcess();
    frm.StartPosition = FormStartPosition.CenterParent;
    frm.ShowDialog(this);
    Thread.Sleep(0);
    }

    private void Start()
    {
    Thread thread = new Thread(displayProcess);
    thread.Start();
    }

    Lời khuyên: bạn dùng thread để xử lý giao diện điều này rất không nên -> khi chương trình lớn nhiều background thread song song, chòng chéo rất khó debug và dễ bị crash.
    Bạn nên post message từ background thread lên cho GUI thread -> GUI thread có trách nhiệm mở dialog

  3. #3
    Ngày gia nhập
    08 2010
    Bài viết
    44

    Bạn thử debug xem cái FormStartPosition.CenterParent; là cái center của FormStartPosition hay của screen? cái frm.StartPosition là so với cái parent của nó hay so với screen?
    Visual C# Code:
    1. private void CenterScreen(Form frm)
    2. {
    3.  // Get the Width and Height of the form
    4.  int frm_width = frm.Width;
    5.  int frm_height = frm.Height;
    6.    
    7.  //Get the Width and Height (resolution) of the screen
    8.  System.Windows.Forms.Screen src = System.Windows.Forms.Screen.PrimaryScreen;
    9.  int src_height = src.Bounds.Height;
    10.  int src_width = src.Bounds.Width;
    11.    
    12.  //put the form in the center
    13.  frm.Left = (src_width - frm_width) / 2;
    14.  frm.Top = (src_height - frm_height) / 2;
    15. }
    sưu tầm )

  4. #4
    Ngày gia nhập
    12 2010
    Bài viết
    23

    @anhnt3: cảm ơn bạn, nhưng khi mình thêm this vào showDialog(); thì bị lỗi thực thi mất rồi,m ình nghĩ có lẽ là do form được gọi ko nhận ra form gọi nó là form nào vì khi mình đặt các vị trí khác như Center Screen thì vẫn ok
    Mình chưa quen sử dụng đa tiến trình nên mình ko rõ lắm bạn có thể hướng dẫn cụ thể hơn cho mình ko? Tức là form chính vẫn thực hiện trong khi mở một form con(thể hiện progressbar đấy mà)

    @totden: mình set properties ở phần design rồi mà, cái này mình minh họa thôi. Cảm ơn bạn

    P/s: mình post nhầm qua topic asp.net mod chuyển giúp sang box winform để mọi người cùng thảo luận giúp mình.
    Đã được chỉnh sửa lần cuối bởi khanhnd88 : 04-08-2011 lúc 11:33 PM.

  5. #5
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi khanhnd88 Xem bài viết
    @anhnt3: cảm ơn bạn, nhưng khi mình thêm this vào showDialog(); thì bị lỗi thực thi mất rồi,m ình nghĩ có lẽ là do form được gọi ko nhận ra form gọi nó là form nào vì khi mình đặt các vị trí khác như Center Screen thì vẫn ok
    Mình chưa quen sử dụng đa tiến trình nên mình ko rõ lắm bạn có thể hướng dẫn cụ thể hơn cho mình ko? Tức là form chính vẫn thực hiện trong khi mở một form con(thể hiện progressbar đấy mà)

    @totden: mình set properties ở phần design rồi mà, cái này mình minh họa thôi. Cảm ơn bạn

    P/s: mình post nhầm qua topic asp.net mod chuyển giúp sang box winform để mọi người cùng thảo luận giúp mình.
    Bạn đọc thêm bài này nhé:
    http://msdn.microsoft.com/en-us/library/ms951089.aspx
    , có gì mình sẽ chỉ thêm.

    Tớ đính kèm source cho trường hợp của bạn
    Attached Files Attached Files

  6. #6
    Ngày gia nhập
    12 2010
    Bài viết
    23

    Mặc định Vị trí Show form thông qua Thread

    Thì mình code cũng có khác gì cái demo của bạn đâu, thêm this vào nó báo lỗi : Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on..
    Có cách khác không bạn

  7. #7
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi khanhnd88 Xem bài viết
    Thì mình code cũng có khác gì cái demo của bạn đâu, thêm this vào nó báo lỗi : Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on..
    Có cách khác không bạn
    Có bạn ạ.
    Bạn truyền luôn đối tượng Form khi start thread nhé -> param này sẽ được truyền vào hàm mà thread run.
    Sau đó ở hàm thread, bạn lấy đối tượng Forrm này cho vào chỗ this.
    Cách truyền param cho thread bạn xem ở kĩ ở dây nhé: http://www.codeproject.com/KB/cpp/pa...edthreads.aspx
    Bao chàng trai không tiếc tuổi xuân đang viết nhiều chương trình
    Em đẹp xinh cũng quyết lập công chưa muốn lấy chồng
    http://ipmac.vn/ <- Học lập trình ... sư
    http://laptrinh.tv/ <- Kênh chia sẻ video học IT
    http://www.youtube.com/user/anhnt3 <- Video thực hành lập trình... sư từ A-Z

Các đề tài tương tự

  1. ADO.NET show lại form sau khi nhấn vào dấu X để tắt đi.
    Gửi bởi sieuthamtu90 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 19-09-2012, 02:51 PM
  2. Cách Show thông tin khi nhập textbox từ form 1 chuyển sang form 2 áp dụng Delegate
    Gửi bởi loinguyen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 24-08-2012, 01:42 AM
  3. Show form lên trên các form đang mở trong C#?
    Gửi bởi dotritiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 20-09-2011, 10:14 AM
  4. hướng dẫn cách gọi Form child show ở Form main
    Gửi bởi dothanhlap trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 14-07-2011, 02:53 PM
  5. Lấy biến của form 1 show lên form 2
    Gửi bởi AWM trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 24-08-2009, 05:25 AM

Quyền hạn của bạn

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