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

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

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

Re[6]: PointToClientの座標がマイナス


(過去ログ 71 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■41508 / inTopicNo.1)  PointToClientの座標がマイナス
  
□投稿者/ コンタクト (2回)-(2009/09/22(Tue) 14:30:00)

分類:[C#] 

お世話になっています。
VS2005 C#

DragDrop制御ですが
DragDropイベントを使用しています。
セルの座標をマウス座標から計算するようにしたために
PointToClienetを使用してDataGridViewのセル座標を計算しています。

そのときにまれにx座標がー値になってしまい
計算がおかしくなってしまうことがあります。
x座標がーになってしまう原因はなんなのでしょうか。

使用コードは以下のようになっています。


private void DataGridView1_DragDrop(object sender, DragEventArgs e)
{
Point mouse = DataGridView1.PointToClient(System.Windows.Forms.Corsor.Position);

int x_poiny = mouse.X - 1;
   ↑ー53などのマイナス値が入る。

以下座標を使用したコード
}

以上です。よろしくお願いいたします。
引用返信 編集キー/
■41510 / inTopicNo.2)  Re[1]: PointToClientの座標がマイナス
□投稿者/ 囚人 (414回)-(2009/09/22(Tue) 15:42:16)
System.Windows.Forms.Corsor.Position
を使うんじゃなくて、引数 e の値を使った方がいいのでは?
引用返信 編集キー/
■41511 / inTopicNo.3)  Re[1]: PointToClientの座標がマイナス
□投稿者/ 魔界の仮面弁士 (1315回)-(2009/09/22(Tue) 15:57:09)
2009/09/22(Tue) 20:40:06 編集(投稿者)

No41508 (コンタクト さん) に返信
> セルの座標をマウス座標から計算するようにしたために
計算…? HitTest だけでは駄目なのでしょうか?

Point pt = dataGridView1.PointToClient(new Point(e.X, e.Y));
DataGridView.HitTestInfo hit = dataGridView1.HitTest(pt.X, pt.Y);
label1.Text = hit.ToString();


> Point mouse = DataGridView1.PointToClient(System.Windows.Forms.Corsor.Position);
Cursor.Position は、現在のマウス位置であって、ドロップ座標では無いですよ。
ドロップ時の座標を得たいなら、DragEventArgs 引数から得るようしましょう。
引用返信 編集キー/
■41512 / inTopicNo.4)  Re[2]: PointToClientの座標がマイナス
□投稿者/ コンタクト (4回)-(2009/09/22(Tue) 16:33:07)
2009/09/22(Tue) 16:50:00 編集(投稿者)

No41510 (囚人 さん) に返信
> System.Windows.Forms.Corsor.Position
> を使うんじゃなくて、引数 e の値を使った方がいいのでは?

回答有難うございます。
どの用に使えばいいのでしょうか。

引用返信 編集キー/
■41513 / inTopicNo.5)  Re[2]: PointToClientの座標がマイナス
□投稿者/ コンタクト (5回)-(2009/09/22(Tue) 16:47:31)
No41511 (魔界の仮面弁士 さん) に返信
> ■No41508 (コンタクト さん) に返信
>>セルの座標をマウス座標から計算するようにしたために
> 計算…? HitTest だけでは駄目なのでしょうか?

回答有難うございます。
この用な方法があるとは。。。。
有難うございました。動作確認は出来ましたが
いろんなデバッグで座標(セル)の確認をしてみます。

>>Point mouse = DataGridView1.PointToClient(System.Windows.Forms.Corsor.Position);
> Corsor.Position は、現在のマウス位置であって、ドロップ座標では無いですよ。
> ドロップ時の座標を得たいなら、DragEventArgs 引数から得るようしましょう。
はい、セルの上にドロップしているので、セル座標がドロップ座標になるようにしていました。

引用返信 編集キー/
■41514 / inTopicNo.6)  Re[3]: PointToClientの座標がマイナス
□投稿者/ 魔界の仮面弁士 (1316回)-(2009/09/22(Tue) 17:06:41)
No41513 (コンタクト さん) に返信
>>> Point mouse = DataGridView1.PointToClient(System.Windows.Forms.Corsor.Position);
>> Corsor.Position は、現在のマウス位置であって、ドロップ座標では無いですよ。
Corsor ではなく
Cursor です。

>> ドロップ時の座標を得たいなら、DragEventArgs 引数から得るようしましょう。
> はい、セルの上にドロップしているので、セル座標がドロップ座標になるようにしていました。
ドロップした時点の座標は、イベント引数(DragEventArgs) から e.X および e.Y として得られます。

もしもイベントの処理中にマウス位置が変更された場合、イベント引数が示す座標は、
移動前の座標、つまりドロップされた瞬間の座標を表していますが、Cursor.Position が示す座標は
移動後の座標、つまり現在のマウス座標を表すため、この違いが
>>> x座標がーになってしまう原因はなんなのでしょうか。
を生んだのではないでしょうか。

なお、「ー」は長音記号であって、マイナス記号「−」とは別の文字です。
引用返信 編集キー/
■41515 / inTopicNo.7)  Re[4]: PointToClientの座標がマイナス
□投稿者/ コンタクト (6回)-(2009/09/22(Tue) 17:06:58)
2009/09/23(Wed) 09:55:43 編集(投稿者)
2009/09/23(Wed) 09:55:37 編集(投稿者)

No41514 (魔界の仮面弁士 さん) に返信
> ■No41513 (コンタクト さん) に返信
> >>> Point mouse = DataGridView1.PointToClient(System.Windows.Forms.Corsor.Position);
> >> Corsor.Position は、現在のマウス位置であって、ドロップ座標では無いですよ。
> Corsor ではなく
> Cursor です。
>
> >> ドロップ時の座標を得たいなら、DragEventArgs 引数から得るようしましょう。
>>はい、セルの上にドロップしているので、セル座標がドロップ座標になるようにしていました。
> ドロップした時点の座標は、イベント引数(DragEventArgs) から e.X および e.Y として得られます。
>
> もしもイベントの処理中にマウス位置が変更された場合、イベント引数が示す座標は、
> 移動前の座標、つまりドロップされた瞬間の座標を表していますが、Cursor.Position が示す座標は
> 移動後の座標、つまり現在のマウス座標を表すため、この違いが
> >>> x座標がーになってしまう原因はなんなのでしょうか。
> を生んだのではないでしょうか。
>
> なお、「ー」は長音記号であって、マイナス記号「−」とは別の文字です。

マウスで値をとるとそのようなことが発生するんですね。
有難うございました。


引用返信 編集キー/
■41521 / inTopicNo.8)  Re[5]: PointToClientの座標がマイナス
□投稿者/ Azulean (461回)-(2009/09/22(Tue) 20:03:33)
>コンタクトさん
DragEventArgs と HitTest を使ったら解決できたと言うことでしょうか?
差し支えなければ、どれを使えばうまくいったかを書き残して頂ければ幸いです。
解決済み
引用返信 編集キー/
■41525 / inTopicNo.9)  Re[6]: PointToClientの座標がマイナス
□投稿者/ コンタクト (7回)-(2009/09/23(Wed) 09:57:31)
2009/09/23(Wed) 11:26:21 編集(投稿者)
2009/09/23(Wed) 11:26:17 編集(投稿者)
2009/09/23(Wed) 10:05:43 編集(投稿者)
2009/09/23(Wed) 10:05:39 編集(投稿者)

No41521 (Azulean さん) に返信
> >コンタクトさん
> DragEventArgs と HitTest を使ったら解決できたと言うことでしょうか?
> 差し支えなければ、どれを使えばうまくいったかを書き残して頂ければ幸いです。

両方です。
スクロールしてもセルの値が取るとこができ
もとめていた動作をするようになりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -