2010-05-21 34 views
6

Khi tôi cố gắng tạo một đối tượng Đồ họa, tại sao không làm việc sau đây?Phương thức khởi tạo mặc định của System.Drawing.Graphics bị loại bỏ như thế nào?

System.Drawing.Graphics graphicsObj = new System.Drawing.Graphics(); 

(Tôi biết rằng tôi có thể tạo ra một private System.Windows.Forms.Panel Obj; và sau đó làm CreateGraphics() nếu tôi muốn nó hoạt động)

tôi đã cố gắng để tìm một nhà xây dựng tùy chỉnh cho đồ họa, nhưng tôi không thể tìm thấy một. Microsoft đã xác định nó ở đâu, hoặc nó chặn nó như thế nào?

Trả lời

10

Trình xây dựng mặc định chỉ được tạo bởi trình biên dịch C# nếu không có các hàm tạo khác được khai báo. Trong trường hợp này, có vẻ như tất cả các nhà xây dựng là nội bộ hoặc riêng tư. Về cơ bản bạn không xây dựng một bản thân - bạn yêu cầu một từ hình ảnh, kiểm soát hoặc bất kỳ thứ gì hoặc được tặng một hình cho các sự kiện sơn v.v.

0

Microsoft không cung cấp cho các nhà xây dựng đối tượng Đồ họa. Cách duy nhất để tạo một cá thể là thông qua các phương thức tĩnh, chẳng hạn như CreateGraphics() hoặc FromImage(). Đó là lý do tại sao mã của bạn không hoạt động. Ngoài ra, như một sidenote, đối tượng Graphics không thể được thừa hưởng từ.

+4

Trên thực tế Microsoft đã cung cấp cho các nhà xây dựng lớp Đồ họa, nếu không trình biên dịch sẽ tạo ra một hàm tạo mặc định công khai. Microsoft đã không thực hiện bất kỳ nhà thầu nào mà họ đã thêm vào công khai. –

+0

Đồng ý! Có, thực sự, các nhà thầu. Không ai có thể truy cập công khai – Icemanind

3

Rõ ràng là đồ họa không thể có hàm tạo mặc định. Bạn luôn muốn những gì bạn vẽ được hiển thị ở đâu đó. Một nhà xây dựng mặc định không thể chọn đích của bản vẽ.

cách để có được một đối tượng đồ họa:

  • Graphics.FromImage(). Bạn sẽ vẽ thành một bitmap. Thông thường khi thay đổi kích thước hình ảnh hoặc tạo "canvas".
  • Control.CreateGraphics(). Hãy để bạn vẽ trực tiếp lên màn hình. Luôn sai, thay vào đó hãy sử dụng:
  • Sự kiện sơn. Đối số e.Graphics cho phép bạn vẽ lên màn hình.
  • Sự kiện PrintPage. Đối với lớp PrintDocument, e.Graphics kết thúc trên một mảnh giấy.
  • Graphics.FromHdc(). Sử dụng trong mã P/Invoke cấp thấp, vẽ đến ngữ cảnh thiết bị của Windows.
  • Graphics.FromHwnd(). Như trên, vẽ trực tiếp đến cửa sổ gốc.

Nói tóm lại:

  • Draw lên màn ảnh với sự kiện Sơn
  • Vẽ đến máy in với sự kiện PrintPage
  • Vẽ một bitmap với FromImage()
Các vấn đề liên quan