- PR -

C# pictureBoxを使わずにOnPaintで描画した画像にMouseUpなどを使いたい

投稿者投稿内容
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-18 21:37
ヘルプで領域を使用したヒット テストというがヒットしたんですが、MouseUpなどを使いたいのですが、よくわかってないのですが、できますか?
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-19 15:32
コンストラクタにthisとやるとMouseUpがでてきますが、これでRegionを使えば画像を操作できますか?
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-20 17:00
コード:
private void Form1_Load
{
this.MouseUp += new System.Windows.Forms.MouseEventHandle(this.Form1_MouseUp);
}
Point MouseUpLocation = new Point();
private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
MouseUpLocstion.X = e.X;
MouseUpLocstion.Y = e.Y;
}
protected override void OnPaint(PaintEventArgs pea)
{
Image image = Image.FromFile(@"C:\sample.bmp");
Graphics g = pea.Graphics;
g.DrawImage(image,0,173);
Region region1 = new Region(new Rectangle(0,173,20,30));
while(oldtime + 14000 >= System.Environment.TickCount)
{
if(region1.IsVisible(MouseUpLocstion, pea.Graphics))
{
g.DrawImage(image,50,173);
goto endloop;
}
Application.DoEvents();
}
endloop:
g.DrawImage(image,0,250);
}


これで、できました。
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-20 17:03
Form1_Loadのあとに(object sender, System.EventArgs e)が抜けてますね。
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-11-20 17:36
oldtimeの初期化が抜けてますね。
public double oldtime = System.Environment.TickCount;
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-12-04 07:44
MouseUpLocationのaがsになっていてMouseUpLocstionになってますね(^^;。自分のソースも全部そうなっていました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-04 09:46
すいません、何をされたいのかが判りませんでした。
PaintEventArgs を MouseUp イベントでも使用したいということでしょうか?

ソースを見てみたのですが、TickCount を取ったりと不明な点が多いので、
具体的に何が必要で何を実装しているつもりなのかを書かれた方が良いと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
AKIR
常連さん
会議室デビュー日: 2005/11/08
投稿数: 34
投稿日時: 2005-12-04 11:21
PictureBoxとかのコントロールしかMouseUpなどのイベントが使えないのかなと思いまして、領域を使用したヒット テストというのを見てPictureBoxを使わないでできるのかなと思い、何もわからず投稿してしまったのですが、Form1_MouseUpというのがあるのを後で発見してFormに直接描画した画像をいじりたかっただけで後はヘルプで何を参考にしたかわかりませんが、Point MouseUpLocationとやっているのをみつけて、やってみたら、こんなコードになりました。
TickCountは14秒間とるようにしたのですが、こうやってまわさないとMouseUpLocationを感知するのが一瞬で終わってしまうじゃないですか(違いますか?ほかにやり方があたら教えていただけるとうれしいです)。
別に、14秒間だけ反応してくれて問題ないのですが、マージャンで牌をきって移すという動作がやりたかっただけです。このソースで自分のやりたいことは実現できました。
でも、問題があって、OnPaintの中でBeginInvokeしてEndInvokeで乱数発生させたint[] xを使って牌を表示するようにしているのですが、何が問題かわかってないのですが、このウィンドウがほかのウィンドウの後ろになってしまうと、またアクティブにして前にしたとき、int[] xを使って表示した牌が変わってしまうのです。どうしてでしょうか?

スキルアップ/キャリアアップ(JOB@IT)