2016-05-01 13 views
0

まず、データリスト(複数行)があります。そのデータはプレビュー用にビットマップに描画する必要があります(ビットマップは卒業証書です)。プレビューボタンをクリックすると、ジョブをプレビューできる別のタブ(グラフィックス付きのビットマップ)に送られます。その後、ユーザーはデータ(グラフィックス)の印刷を選択できます。ビットマップ上のグラフィックスを動的に描画するdillema

別の行を選択した場合、グラフィックスを変更する必要があります。

問題は次のとおりです。ピクチャボックスに描画する場所とタイミングをビットマップでどのように実装すればよいか分かりません。私はいくつかの方法を試みました(毎回描画する単一の静的ビットマップを持っています - ビットマップを生成するメソッドを持つ2回目の再描画でクリアできない - メモリリークのために失敗します)テキストのみで、背景画像でのみ、または大きなメモリリークで(描画された文字列を表示する必要があるため、ビットマップを処理できません)。

私はこれにどのようにアプローチすべきですか?

Selecting the row for which we're generating the preview

The way the preview window should look like (with text on it, obviously)

答えて

0

さてあなたは、ソースまたはあなたが動的にするたびに、結果を作成する必要があるとの描きと1のために使用する2つのビットマップ、1のいずれかが必要です。それに

をやったときに

  • に必要ないずれの場合においても

    は、私は物事をシンプルに保つとすると、結果の画像を作成することをお勧めオリジナルのグラフィックが用意組み合わせの

  • 処分を保ちますSelectionChanged

    Bitmap diplomaBackground = null; // load upon startup 
    Bitmap result = null; 
    
    private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
    { 
        if (result != null) 
        { 
         if (pb_preview.Image != null) pb_preview.Image = null; 
         result.Dispose(); 
        } 
    
        if (dataGridView1.SelectedRows.Count > 0) 
        { 
         result = CreateNewDiploma(dataGridView1.SelectedRows[0].Index); 
         pb_preview.Image = result; 
        } 
    } 
    
    Bitmap CreateNewDiploma(int rowIndex) 
    { 
        Bitmap bmp = new Bitmap(diplomaBackground); 
    
        using (Graphics G = Graphics.FromImage(bmp)) 
        { 
         // draw the data.. 
        } 
        return bmp; 
    } 
    

    プレビューボックスを設定するズームする。

+0

ありがとうございました!私は別のクラスのディプロマメソッドの作成を苦労していたので、私はこれを考えなかったし、私はそれを処分する方法がなかった(実際には、ビットマップvariabileフォームクラスの内側)。 –

関連する問題