2011-07-07 27 views
9

Có thể vẽ dữ liệu trên biểu đồ ZedGraph và lưu nó dưới dạng tệp mà không hiển thị/tạo biểu đồ hiển thị cho người dùng không? Tôi đang tìm cách xử lý rất nhiều bộ dữ liệu và tạo biểu đồ và lưu nó vào một tệp để xem bên ngoài ứng dụng.Tạo và lưu các ô ZedGraph mà không hiển thị trên biểu mẫu

Nếu điều này không thể thực hiện được, có thể hiển thị biểu đồ trên biểu mẫu ẩn/thu nhỏ, lưu biểu đồ, đóng cửa sổ và lặp lại cho từng biểu đồ không?

Trả lời

7

Có thể.

Bạn tạo và thao tác điều khiển ZedGraph như bình thường, nhưng chỉ cần không thêm nó vào danh sách Form.Controls, ví dụ, trong phương pháp InitializeComponent(), nhận xét ra cái gì đó trông giống như dưới đây

this.Controls.Add(this.zedGraphControl); 

Có là một vài cách để lưu biểu đồ

  • Nếu bạn muốn hộp thoại SaveAs xuất hiện, hãy gọi SaveAs() trên điều khiển biểu đồ.
  • Nếu bạn không muốn hộp thoại, bạn có thể viết ra các hình ảnh sử dụng GetImage() trên MasterPane, và sau đó lưu rằng:.

    zedGraphControl.MasterPane.GetImage() Lưu ("test.bmp") ;

+1

Tôi có một BackgroundWorker chạy mã để tạo biểu đồ, cũng như các tác vụ khác, không đồng bộ. Tôi đã xác định rằng tạo ra một ZedGraphControl trên một chủ đề nền sẽ gây ra các chủ đề không hoàn thành (thông qua sự kiện TaskComplete), mặc dù phương pháp DoWork thực hiện. Có phương pháp nào khác để làm điều này không? –

+0

Tôi vừa thử điều này và nó làm việc cho tôi, tôi đã đăng ký với worker.RunWorkerCompleted + = new RunWorkerCompletedEventHandler (backgroundWorker1_RunWorkerCompleted); – PeskyGnat

+0

Xin lỗi, tôi thực sự có một sự kiện được phát hành sau khi một người làm việc nền hoàn thành. Trình xử lý sự kiện tạo biểu đồ và sau đó khởi động lại cùng một BackgroundWorker đó. Lần thứ hai BGWorker chạy, nó không bao giờ được vào TaskComplete. Tôi phải đặt thế hệ đồ thị trong BGWorker riêng biệt vì một lý do nào đó. Nó khá kỳ lạ. –

5

Dưới đây là một đoạn mã để tạo và lưu các file ảnh mà không cần bất kỳ cơ sở hạ tầng cần thiết WinForms:

var zedGraph = new ZedGraphControl(); 

// configure ZedGraphControl here 

using (var g = zedGraph.CreateGraphics()) 
{ 
    zedGraph.MasterPane.ReSize(g, new RectangleF(0, 0, widthPx, heightPx)); 
} 
zedGraph.MasterPane.GetImage().Save(Path.Combine(destinationDir, "test.bmp")); 

Điều này thậm chí sẽ có thể chạy như một dịch vụ mà không cần bất kỳ máy tính để bàn. Nhược điểm duy nhất là bạn cần tham khảo System.Windows.FormsSystem.Drawing để sử dụng nó.