Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Vẽ lại form, màn hình giật, giải pháp nào để khắc phục?

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    24

    Mặc định Vẽ lại form, màn hình giật, giải pháp nào để khắc phục?

    Mình vẽ lên form, giờ click chuột vẽ thêm 1 ô vuông. Nhưng khi refresh lại form thì màn hình bị giật. Giải pháp nào cho vấn đề này?

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    148

    thực ra khi vẽ form nếu bạn thường xuyên sữ dụng phương thức refresh thì form mình sẽ bị giật.bạn nên giảm bớt sử dụng phương thức refresh .bên cạch phương thức refresh bạn có thể sd phương thức Invalidate.
    bạn tìm hiểu thêm nhé

  3. #3
    Ngày gia nhập
    02 2009
    Bài viết
    24

    Trích dẫn Nguyên bản được gửi bởi thanhhuy191188 Xem bài viết
    thực ra khi vẽ form nếu bạn thường xuyên sữ dụng phương thức refresh thì form mình sẽ bị giật.bạn nên giảm bớt sử dụng phương thức refresh .bên cạch phương thức refresh bạn có thể sd phương thức Invalidate.
    bạn tìm hiểu thêm nhé
    Ừ theo mình hiểu thì Invalidate sẽ vẽ lại khu cần vẽ thôi. Mình đã thay đổi nhưng màn hình vẫn giật đùng đùng như refresh!

  4. #4
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Cho mình file exe xem thử nó giật như thế nào?

  5. #5
    Ngày gia nhập
    01 2008
    Bài viết
    148

    thực ra bạn nên sử dụng tối thiểu phương thức refresh thôi.Bạn thử post cái file exe và một đoạn code vẽ của bạn lên đây không?có thể mọi người sẽ có cách khắc phục

  6. #6
    Ngày gia nhập
    02 2009
    Bài viết
    24

    Mặc định Vẽ lại form, màn hình giật, giải pháp nào để khắc phục?

    Trích dẫn Nguyên bản được gửi bởi thanhhuy191188 Xem bài viết
    thực ra bạn nên sử dụng tối thiểu phương thức refresh thôi.Bạn thử post cái file exe và một đoạn code vẽ của bạn lên đây không?có thể mọi người sẽ có cách khắc phục
    Ừ mình có làm 1 bài mô phỏng, do DB hơi lớn mình ko post ở đây được, đại ý như thế này:

    -Mình vẽ trên Form
    -Trên Form có nhiều ô vuông
    -Di chuột sẽ xác định nó đang ở ô vuông nào
    -Click vào ô vuông đó thì vẽ ô vuông với màu khác (sự kiện mouse_click) và dùng Invalidate

    Màn hình sẽ nháy 1 cái, mỗi khi click thôi.

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    everywhere
    Bài viết
    2

    Trích dẫn Nguyên bản được gửi bởi khakha Xem bài viết
    Ừ mình có làm 1 bài mô phỏng, do DB hơi lớn mình ko post ở đây được, đại ý như thế này:

    -Mình vẽ trên Form
    -Trên Form có nhiều ô vuông
    -Di chuột sẽ xác định nó đang ở ô vuông nào
    -Click vào ô vuông đó thì vẽ ô vuông với màu khác (sự kiện mouse_click) và dùng Invalidate

    Màn hình sẽ nháy 1 cái, mỗi khi click thôi.
    Đây là câu hỏi mình đang thắc mắc,bạn nào biết cách khắc phục thế nào thì giúp mình với..

  8. #8
    Ngày gia nhập
    01 2008
    Bài viết
    140

    vẽ để khỏi nháy thì nên
    - vẽ phần nào thay đổi mà không vẽ lại toàn bộ
    - sử dụng bộ đệm đôi double buffer (search msdn)
    - nếu phải vẽ toàn bộ thì vẽ vào một lớp trung gian sau đó chuyển lên form tránh vẽ trực tiếp
    còn cụ thể thì bạn up đoạn code chổ vẽ lên mọi người mới biết mà coi được
    hi vọng không trả lời sai

  9. #9
    Ngày gia nhập
    04 2010
    Nơi ở
    Thâm sơn cùng cốc
    Bài viết
    825

    Chỉ vẽ lại phần hình chữ nhật là ô cần vẽ thôi. Cho nên đừng gọi Invalidate() vì nó sẽ vẽ lại toàn bộ cửa sổ. Mà gọi Invalidate(Rectangle) trong đó Rectangle là hình chữ nhật hay là ô bạn muốn vẽ lại mà thôi.Như vậy sẽ không bị giật.

  10. #10
    Ngày gia nhập
    06 2009
    Nơi ở
    Hà Nội
    Bài viết
    78

    mình có gợi ý này: bạn đừng nên override hàm Paint mà vẽ trực tiếp
    Ví dụ:
    PHP Code:
    protected override void OnPaint(PaintEventArgs e)
            {
                
    this.DrawBoard();
            }
    private 
    void DrawBoard()
            {
                if (
    theme == null) return;
                
    using (Graphics g CreateGraphics())
                
    using (Bitmap bitBuf = new Bitmap(ClientRectangle.WidthClientRectangle.Height))
                
    using (Graphics buffer Graphics.FromImage(bitBuf))
                {
                    for (
    int i 0Rowsi++)
                        for (
    int j 0Colsj++)
                        {
                            
    Rectangle rect = new Rectangle(CellHienLenCellHienLenCellHienLenCellHienLen);
                            
    Rectangle imgRect GetRectangle(ij);
                            
    buffer.DrawImage(themerectimgRectGraphicsUnit.Pixel);
                        }
                    
    g.DrawImage(bitBuf00);
                    
    g.Dispose();
                }
            } 
    C Sharp is very cool

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

  1. Làm sao để vẽ đồ thị real-time trong form không bị giật hình? (đã dùng doublebuffer)
    Gửi bởi voicewithin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 19-01-2012, 01:30 PM
  2. xin giải pháp Kích thước form trên windows form và webform
    Gửi bởi billsang trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 07-11-2011, 11:16 PM
  3. Giao khả so sánh và giao diện khả tuần tự ??
    Gửi bởi phuongtv_hvktqs trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 02-07-2011, 12:00 PM
  4. Làm thế nào để vẽ trong form không bị giật?
    Gửi bởi voicewithin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 15
    Bài viết cuối: 25-04-2011, 08:55 AM
  5. Dùng GDI+ vẽ mấy cái hình đơn giản + timer bị giật giật, làm sao khắc phục?
    Gửi bởi darkblackangel trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 15-05-2009, 10:37 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