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

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

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

Re[3]: フォームからはみ出ないようにテキストボックスをマウスで移動


(過去ログ 56 を表示中)

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

■31559 / inTopicNo.1)  フォームからはみ出ないようにテキストボックスをマウスで移動
  
□投稿者/ キム (1回)-(2009/01/23(Fri) 17:44:44)

分類:[VB.NET/VB2005 以降] 

初めて投稿します。
VB初心者です。
WinXP、VB.NET2005という環境でやっています。
フォーム上のテキストボックスをマウスで移動させてかつ、フォームから 
はみ出ないようにするというのを作っているのですが、右端はできているのですが上と左端のやり方が良くわかりません。
右端のを参考に色々考えたのですが、なかなか思い通りに動きませんでした。
下も一応は出来ているのですが、右下あたりではみ出るようになってしまいます。
よろしくお願いします。
見にくかったらすみません。

 ' 移動前の位置
    Dim startX As Integer
    Dim startY As Integer
    Dim FormWidth As Integer = Me.ClientSize.Width
    Dim FormHeight As Integer = Me.ClientSize.Height
    Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
        ' 左クリックの場合
        If e.Button = Windows.Forms.MouseButtons.Left Then
            '移動前の位置を記録
            startX = e.X
            startY = e.Y
        End If
    End Sub

    Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            ' コントロールの取得
            Dim control As Control = CType(sender, Control)
           
            ' コントロールの位置設定
              If control.Left + e.X - startX + TextBox1.Size.Width < FormWidth Then
                If control.Top + e.Y - startY + TextBox1.Size.Height > FormHeight Then
                    control.Left = control.Left + e.X - startX - TextBox1.Size.Height
                Else
                    control.Left = control.Left + e.X - startX
                    control.Top = control.Top + e.Y - startY
                End If
            Else
                control.Top = control.Top + e.Y - startY
            End If
            Me.Refresh()
        End If
    End Sub

引用返信 編集キー/
■31561 / inTopicNo.2)  Re[1]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ .SHO (557回)-(2009/01/23(Fri) 18:15:22)
No31559 (キム さん) に返信

とりあえず、マウスの座標は計算に必要ないと思います。

引用返信 編集キー/
■31568 / inTopicNo.3)  Re[2]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ まどか (602回)-(2009/01/23(Fri) 22:22:12)
よく見てませんが、MouseDownとMouseMoveでは引数の座標の座標系が違ったはず。
#スクリーン座標とクライアント座標

Control.PointToScreen
Control.PointToClient
を調べてみてください。

引用返信 編集キー/
■31570 / inTopicNo.4)  Re[3]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ キム (2回)-(2009/01/23(Fri) 23:17:21)
No31561 (.SHO さん) に返信
No31568 (まどか さん) に返信
お早い返信ありがとうございます。
このやり方は「VB.net マウスで移動 コントロール」と検索して知りました。
それだけだとフォームからはみ出てしまうのではみ出ないようにする方法を
色々探したり考えたりしましたが、なかなかうまくいかなかったのでここに書かせて頂きました。
引用返信 編集キー/
■31576 / inTopicNo.5)  Re[4]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ Azulean (275回)-(2009/01/24(Sat) 13:37:36)
2009/01/24(Sat) 13:41:27 編集(投稿者)

> このやり方は「VB.net マウスで移動 コントロール」と検索して知りました。
> それだけだとフォームからはみ出てしまうのではみ出ないようにする方法を
> 色々探したり考えたりしましたが、なかなかうまくいかなかったのでここに書かせて頂きました。

「こんなことを確かめたらどうだろう?」に対して、「経緯の説明」といった内容のレスポンスが返すのはなんかずれていますよ。
アドバイスの内容が分からないのであれば、もう少し突っ込んだ質問をしてみたらよいのでは?
単に、説明の繰り返しをするだけだと、何を求めているのかよく分からなくなります。

------------
さておき、その追及だけでは解決に進まないので、見るべきポイントを。

まずは、If文の内容をよく読み直して下さい。
条件の考慮漏れと、不等式の誤りがありますので、そこを見直すところから始める必要があるでしょう。

・右側&下側に "同時に" はみ出たときはどこを通るのか
・上側に はみ出したときはどこを通るのか
・左側に はみ出したときはどこを通るのか
・右側&上側、左側&上側、左側&下側に "同時に" はみ出したときはどこを通るのか

これらが分かったら、何が足りないのかをまとめて、どういったIf文にするべきか考えてみて下さい。

そして、補正処理(フォームの内側に留める計算)と移動処理(マウスの移動を反映する計算)を正しく入れていって下さい。
引用返信 編集キー/
■31577 / inTopicNo.6)  Re[3]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ Azulean (276回)-(2009/01/24(Sat) 13:42:15)
No31568 (まどか さん) に返信
> よく見てませんが、MouseDownとMouseMoveでは引数の座標の座標系が違ったはず。
> #スクリーン座標とクライアント座標
そんなことはありません。
TextBoxの内のクライアント座標がどちらでも取得することを確認しました。 (C#)
引用返信 編集キー/
■31595 / inTopicNo.7)  Re[4]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ まどか (603回)-(2009/01/24(Sat) 20:15:15)
> そんなことはありません。
> TextBoxの内のクライアント座標がどちらでも取得することを確認しました。 (C#)

ありゃ、そうでしたっけ。(別の話と勘違いかもです)
失礼しました。

引用返信 編集キー/
■31598 / inTopicNo.8)  Re[5]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ まどか (604回)-(2009/01/25(Sun) 00:12:41)
ドラッグのイベントと勘違いしてました。。。
引用返信 編集キー/
■31608 / inTopicNo.9)  Re[2]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ Jitta (570回)-(2009/01/26(Mon) 11:50:32)
Jitta さんの Web サイト
No31561 (.SHO さん) に返信
> ■No31559 (キム さん) に返信
>
> とりあえず、マウスの座標は計算に必要ないと思います。
>
テキスト ボックスの、左上を持ったのか、右下を持ったのかで、移動できる範囲が異なります。

「テキスト ボックスの左上を、必ずマウス座標にする」のであれば、計算に必要はありません。しかしそうすると、マウス ボタンを押し込んだ瞬間にコントロールが動いてしまいます。
引用返信 編集キー/
■31609 / inTopicNo.10)  Re[3]: フォームからはみ出ないようにテキストボックスをマウスで移動
□投稿者/ みきぬ (345回)-(2009/01/26(Mon) 12:15:41)
とりあえず縦方向の処理のことは忘れて、横方向の移動だけ完璧になるよう作ってみてはどうでしょ?
縦方向の処理は、横方向の処理ができればそれを真似っこするだけでできちゃうだろうし。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -