- 日時: 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
実行結果等の図(画像をクリックすると元のサイズで見る事ができます。)
|