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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.8772 の関連記事表示

<< 0 >>
■8772  Re[2]: マウスイベントを利用したグラフィク表示について
□投稿者/ tikara -(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;




    }
記事No.8729 のレス /過去ログ21より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -