tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
ChartをPictureBoxに表示してクリップボードにコピー(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2013/01/25 11:41
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[チャート][描画・画像][]                                            *
* キーワード:Microsoft Chart Controls,クリップボード,グラフ,チャート,MSChart    *
***********************************************************************************
タイトル : ChartとPictureBoxを一緒にクリップボードにコピー
記 事 No : 10987
投 稿 日 : 2012/12/07(Fri) 16:58
元質問者 : そら  
-----------------------------------------------------------------------------------
教えていただきサンプルも使わせていただいて、Chart内にPictureBoxをつくり、そこに文字を描画して、
そのままそっくりクリップボードにコピーをしようとしたのですが、このままではどちらか一方しかコピーがされません。
どうすれば良いのでしょう、教えてください。
-----------------------------------------------------------------------------------
記事No : 10992
投稿日 : 2012/12/13(Thu) 23:02
回答者 : VBレスキュー(花ちゃん)  
-----------------------------------------------------------------------------------
PictureBox1 と Chart1 は同じサイズにして下記コードを試して見て下さい。
(動作確認用なのでコードは簡略にしていますので、理屈が呑み込めたら目的に合わせて
書き直して下さい)

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dt As New DataTable
        '列の作成
        With dt.Columns
            .Add("日付", GetType(String))
            .Add("指数", GetType(Integer))
        End With
        'データの追加
        dt.Rows.Add("12/01", 40)
        dt.Rows.Add("12/02", 60)
        dt.Rows.Add("12/03", 30)
        '初期化    
        Chart1.Series.Clear()
        'グラフの種類,系列,軸の設定
        Dim rosoku = Chart1.Series.Add("棒グラフ")
        With rosoku
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "指数"
        End With
        Chart1.DataSource = dt
        Chart1.DataBind()
'------------------------------- ここまでは貴方のコードを使用 ------------------------------
Chart1.Visible = False

   'グラフをBitmapとして取得してPictureBox1上に表示
   Dim bmp As New Bitmap(Chart1.Width, Chart1.Height)
   Chart1.DrawToBitmap(bmp, New Rectangle(0, 0, Chart1.Width, Chart1.Height))
   With PictureBox1
      .SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage
      .Image = bmp
   End With
   Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
       Dim f As New Font("MS Pゴシック", 11)
        g.DrawString("ABCDEFG", f, Brushes.Blue, 0, 0)
   End Using
   Clipboard.SetDataObject(PictureBox1.Image, True)
End Sub


又は、ここのサンプルを利用して、貴方が書いたコード風にすると

'-------------------------- ここまでは貴方のコードを使用 ------------------------------
Chart1.Visible = False

   Using memStream As New System.IO.MemoryStream()
      '一旦 Stream オブジェクトに保存
      Chart1.SaveImage(memStream, System.Drawing.Imaging.ImageFormat.Bmp)
      Dim bmp As New Bitmap(memStream)
      With PictureBox1
         .SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage
         .Image = bmp
      End With

      Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
          Dim f As New Font("MS Pゴシック", 11)
           g.DrawString("ABCDEFG", f, Brushes.Blue, 0, 0)
      End Using

   End Using

   If Not PictureBox1.Image Is Nothing Then
      'データをシステム クリップボードに貼り付け
      Clipboard.SetDataObject(PictureBox1.Image, True)
   End If

実行結果等の図(画像をクリックすると元のサイズで見る事ができます。)



 [スレッド一覧へ] [親スレッドへ]