C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 21 を表示中)
■8772 / )  Re[2]: マウスイベントを利用したグラフィク表示について
□投稿者/ tikara (2回)-(2007/10/09(Tue) 22:11:30)
No8730 (IIJIMAS さん) に返信
> ■No8729 (tikara さん) に返信
>>マウスイベントを使って、いろいろな模様を使るプログラムを作りました。しかし、描画された画像がクリップボードに表示されません。
>>それで描画した模様を保存できるようにBitmap、pictureBox.refreshなどで記述するとコピーはできるようになったのですが、今度は
>>描画した模様を消去するボタン(pictureBox1.Image=null;)を押すとエラーがでるようになりました。これはC#の仕様なのでしょうか?
>
> 申し訳ありませんが、回答ではありません。
>
> 前の文と次の文がつながっていないと思います。
> 本気で問題を解決しようとしているなら閲覧者に状況がわかるように書いてください。
すみません。もう一度説明します。
まず、マウスイベントをつかってベジェ曲線のような美しい線を作るプログラムを作りました。それで描画された画像をクリップボードにコピーできるようにしてほかのソフトに貼り付けたいと思いました。しかし、graphicメソッドで作ってgraphicオブジェクトを作成した場合はは、クリップボードにコピーできないようです。それでBItmapオブジェクトを作成してimageプロパティからgraphicオブジェクトを作成するようにしました。そうするとコピーはできるようになったのですが、問題が発生しました。描画した画像をpictureBox1.image=null;のコードで記述したボタンを押すと、消去はできますが、消した後に再度マウスでなぞるとエラーがでるようになってしまいました。
これでわかっていただけましたか?よろしくお願いいたします。
ちなみにコードは以下の通りです(VC#2005)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private bool drawflag;
private Point start;
private Point end3;


private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
drawflag = true;
start.X = e.X;
start.Y = e.Y;

}

}


private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (drawflag == false)
{
return;
}

end3.X = e.X;
end3.Y = e.Y;


Point start = new Point();
Point control1=new Point();
Point control2=new Point();
Point control3=new Point();
Point control4=new Point ();
Point end1=new Point();
Point end2=new Point();



Point[] bezierPoints ={ start, control1, control2, end1, control3, control4, end2 };



//矢印をつける
Graphics g = Graphics.FromImage(pictureBox1.Image);
Pen oldpen = new Pen(Color.Red, 1);
oldpen.EndCap = LineCap.ArrowAnchor;
g.DrawLine(oldpen, start, control1);
g.DrawLine(oldpen, control2, end1);
g.DrawLine(oldpen, end1, control3);
g.DrawLine(oldpen, control4, end2);
g.DrawLine(oldpen, end2,end3);
Pen zdpen = new Pen(Color.LimeGreen, 1);
oldpen.EndCap = LineCap.ArrowAnchor;
g.DrawLine(zdpen, start, control1);
g.DrawLine(zdpen, control2, end1);
g.DrawLine(zdpen, end1, control3);
g.DrawLine(zdpen, control4, end2);
g.DrawLine(zdpen, end2,end3);
Pen ppen=new Pen(Color.Aqua,1);
ppen.EndCap = LineCap.ArrowAnchor;

g.DrawLine(ppen, start, control1);
g.DrawLine(ppen, control2, end1);
g.DrawLine(ppen, end1, control3);
g.DrawLine(ppen, control4, end2);
g.DrawLine(ppen, end2,end3);


// Draw arc to screen.
Pen bluePen = new Pen(Color.Snow, 1);
g.DrawBeziers(bluePen, bezierPoints);

//リソースを開放する
oldpen.Dispose();
ppen.Dispose();

zdpen.Dispose();
bluePen.Dispose();
g.Dispose();
pictureBox1.Refresh();
//開始位置を更新

start.X = end3.X;
start.Y = end3.Y;

}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
drawflag=false;

}

private void button1_Click(object sender, EventArgs e)
{
Clipboard.SetData(DataFormats.Bitmap, pictureBox1.Image);
}

private void Form1_Load(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.Image = bmp;

}

private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;




}

返信 編集キー/


管理者用

- Child Tree -