Exemple #1
0
        //────────────────────────────────────────
        #endregion



        #region アクション
        //────────────────────────────────────────

        public void OnMouseMove(ref bool isRefreshCoordinate, ref bool isRefresh, ScrollpaneImpl scrollpane, object sender, MouseEventArgs e, UserControl uc)
        {
            if (!this.IsHorizontal)
            {
                //━━━━━
                //垂直スクロールバー
                //━━━━━

                if (uc.Capture)
                {
                    //System.Console.WriteLine("○ツリーボックスは画面外のマウスをキャプチャーしています。(" + e.Location.X + "、" + e.Location.Y+")");
                    //━━━━━
                    //画面外へマウスドラッグしていれば
                    //━━━━━

                    int pixel = 0;

                    bool isOutScreen = false;
                    if (e.Location.Y < uc.Bounds.Y)
                    {
                        //━━━━━
                        //画面上の外
                        //━━━━━
                        //ystem.Console.WriteLine("○↑ツリーボックスは画面上の外に逃げたマウスをキャプチャーしています。(" + e.Location.X + "、" + e.Location.Y+")");
                        pixel       = (int)((double)scrollpane.ViewBounds.Y - (double)(uc.Bounds.Y - e.Location.Y) / 10.0d);
                        isOutScreen = true;
                    }
                    else if (uc.Bounds.Y + uc.Bounds.Height < e.Location.Y)
                    {
                        //━━━━━
                        //画面下の外
                        //━━━━━
                        //ystem.Console.WriteLine("○↓ツリーボックスは画面下の外に逃げたマウスをキャプチャーしています。(" + e.Location.X + "、" + e.Location.Y + ")");
                        pixel       = scrollpane.ViewBounds.Y + (int)(((double)e.Location.Y - (double)(uc.Bounds.Y + uc.Bounds.Height)) / 10.0d);
                        isOutScreen = true;
                    }
                    else
                    {
                    }

                    if (isOutScreen)
                    {
                        if (pixel < 0)
                        {
                            // 上端制限
                            pixel = 0;
                        }
                        else if (scrollpane.AppearDataSize.Height < pixel + uc.ClientSize.Height - scrollpane.HScrollbar.Bold)
                        {
                            // 下端制限
                            pixel = scrollpane.AppearDataSize.Height - uc.ClientSize.Height + scrollpane.HScrollbar.Bold;
                        }

                        if (scrollpane.ViewBounds.Y != pixel)
                        {
                            scrollpane.SetViewY(pixel);

                            isRefreshCoordinate = true;
                            isRefresh           = true;
                        }
                    }
                }


                if (0 < this.PressedPosInSbox)
                {
                    //━━━━━
                    // 垂直スクロールボックスのスライダーボックスを動かしている場合。
                    //━━━━━
                    //ystem.Console.WriteLine("スライダーボックスを動かしました。");

                    //
                    //
                    // VisibleBoundsのY座標を設定してください。
                    // ──────────
                    // ここでスライダーボックスの位置を設定しても、
                    // RefreshDataで上書きされます。
                    //
                    //

                    //スライダーボックスの上端の座標
                    double boxTop = (double)(e.Location.Y - this.PressedPosInSbox);

                    //スライダーボックスの移動量
                    double movedHeight = boxTop - (double)this.ToMovableBounds().Y;

                    //スライダーボックスの上端が、何割の位置にあるか。
                    double boxTopPer = movedHeight / (double)this.ToMovableBounds().Height;

                    // スライダーボックスの上端が、データ上、何ピクセルの位置にあたるか。
                    int pixel = (int)((double)scrollpane.AppearDataSize.Height * boxTopPer);

                    if (pixel < 0)
                    {
                        // 上端制限
                        pixel = 0;
                    }
                    else if (scrollpane.AppearDataSize.Height < pixel + uc.ClientSize.Height - scrollpane.HScrollbar.Bold)
                    {
                        // 下端制限
                        pixel = scrollpane.AppearDataSize.Height - uc.ClientSize.Height + scrollpane.HScrollbar.Bold;
                    }

                    scrollpane.SetViewY(pixel);
                }
            }
            else
            {
                //━━━━━
                //水平スクロールバー
                //━━━━━

                if (uc.Capture)
                {
                    //System.Console.WriteLine("○ツリーボックスは画面外のマウスをキャプチャーしています。(" + e.Location.X + "、" + e.Location.Y+")");
                    //━━━━━
                    //画面外へマウスドラッグしていれば
                    //━━━━━

                    int pixel = 0;

                    bool isOutScreen = false;
                    if (e.Location.X < uc.Bounds.X)
                    {
                        //━━━━━
                        //画面上の外
                        //━━━━━
                        //ystem.Console.WriteLine("○↑ツリーボックスは画面上の外に逃げたマウスをキャプチャーしています。(" + e.Location.X + "、" + e.Location.Y+")");
                        pixel       = (int)((double)scrollpane.ViewBounds.X - (double)(uc.Bounds.X - e.Location.X) / 10.0d);
                        isOutScreen = true;
                    }
                    else if (uc.Bounds.X + uc.Bounds.Width < e.Location.X)
                    {
                        //━━━━━
                        //画面下の外
                        //━━━━━
                        //ystem.Console.WriteLine("○↓ツリーボックスは画面下の外に逃げたマウスをキャプチャーしています。(" + e.Location.X + "、" + e.Location.Y + ")");
                        pixel       = scrollpane.ViewBounds.X + (int)(((double)e.Location.X - (double)(uc.Bounds.X + uc.Bounds.Width)) / 10.0d);
                        isOutScreen = true;
                    }
                    else
                    {
                    }

                    if (isOutScreen)
                    {
                        if (pixel < 0)
                        {
                            // 上端制限
                            pixel = 0;
                        }
                        else if (scrollpane.AppearDataSize.Width < pixel + uc.ClientSize.Width - scrollpane.VScrollbar.Bold)
                        {
                            // 下端制限
                            pixel = scrollpane.AppearDataSize.Width - uc.ClientSize.Width + scrollpane.VScrollbar.Bold;
                        }

                        if (scrollpane.ViewBounds.X != pixel)
                        {
                            scrollpane.SetViewX(pixel);

                            isRefreshCoordinate = true;
                            isRefresh           = true;
                        }
                    }
                }


                if (0 < this.PressedPosInSbox)
                {
                    //━━━━━
                    // 水平スクロールボックスのスライダーボックスを動かしている場合。
                    //━━━━━

                    //
                    //
                    // VisibleBoundsのX座標を設定してください。
                    // ──────────
                    // ここでスライダーボックスの位置を設定しても、
                    // RefreshDataで上書きされます。
                    //
                    //

                    //スライダーボックスの左端の座標
                    double boxLeft = (double)(e.Location.X - this.PressedPosInSbox);

                    //スライダーボックスの移動量
                    double movedWidth = boxLeft - (double)this.ToMovableBounds().X;

                    //スライダーボックスの左端が、何割の位置にあるか。
                    double boxLeftPer = movedWidth / (double)this.ToMovableBounds().Width;

                    // スライダーボックスの左端が、データ上、何ピクセルの位置にあたるか。
                    int pixel = (int)((double)scrollpane.AppearDataSize.Width * boxLeftPer);

                    if (pixel < 0)
                    {
                        // 左端制限
                        pixel = 0;
                    }
                    else if (scrollpane.AppearDataSize.Width < pixel + uc.ClientSize.Width - scrollpane.VScrollbar.Bold)
                    {
                        // 右端制限
                        pixel = scrollpane.AppearDataSize.Width - uc.ClientSize.Width + scrollpane.VScrollbar.Bold;
                    }

                    scrollpane.SetViewX(pixel);
                }
            }
        }
Exemple #2
0
        //────────────────────────────────────────

        public void OnMouseDown(ref bool isRefreshData, ref bool isRefresh, out bool isHit, ScrollpaneImpl scrollpane, object sender, MouseEventArgs e, UserControl uc)
        {
            isHit = false;

            if (!this.IsHorizontal)
            {
                //━━━━━
                //垂直スクロールバー
                //━━━━━
                if (this.ToMovableBounds().Contains(e.Location))
                {
                    isHit = true;

                    if (this.ToSliderboxBounds().Contains(e.Location))
                    {
                        //━━━━━
                        // スライダーボックス
                        //━━━━━

                        // カメラ・ボックスの中での、押したマウス座標。
                        // この数字をマウス座標から引くと、カメラ・ボックスの上端位置が分かります。
                        this.PressedPosInSbox = e.Location.Y - this.SliderboxLocation.Y;

                        //ystem.Console.WriteLine("スライダーボックスを押しました。 this.MouseYInCamera=[" + this.VScrollbar.PressedPosInSbox + "]");
                    }
                    else
                    {
                        //━━━━━
                        // スライダーボックスでないところをクリックした場合
                        //━━━━━
                        this.PressedPosInSbox = 0;

                        if (e.Location.Y < this.SliderboxLocation.Y)
                        {
                            //ystem.Console.WriteLine("移動可能領域(上)を押しました。1ページ分上にスクロールしたい。 this.MouseYInCamera=[" + this.VScrollbar.PressedPosInSbox + "]");

                            //
                            //
                            // スライダーボックスの縦幅分、スライダーボックスを上に移動します。
                            //
                            // スライダーボックスの座標ではなく、setViewY() で確定します。
                            //
                            //

                            int dstY = this.SliderboxLocation.Y - this.SliderboxLength;
                            if (dstY < this.MoveableY)
                            {
                                dstY = this.MoveableY;
                            }

                            // 移動可能範囲の先端からの移動量。
                            int movedHeight = dstY - this.MoveableY;

                            // スライダーボックスの上辺が、移動可能範囲全体の何割か。
                            double boxTopPer = (double)movedHeight / (double)this.MovableLength;

                            // データの高さの内、指定割合は何ピクセルか。
                            int pixel = (int)((double)scrollpane.AppearDataSize.Height * boxTopPer);

                            if (scrollpane.ViewBounds.Y != pixel)
                            {
                                scrollpane.SetViewY(pixel);
                                isRefreshData = true;
                                isRefresh     = true;
                            }
                        }
                        else
                        {
                            //ystem.Console.WriteLine("移動可能領域(下)を押しました。1ページ分下にスクロールしたい。 this.MouseYInCamera=[" + this.VScrollbar.PressedPosInSbox + "]");

                            //
                            //
                            // スライダーボックスの縦幅分、スライダーボックスを下に移動します。
                            //
                            // スライダーボックスの座標ではなく、setViewY() で確定します。
                            //
                            //

                            int dstY = this.SliderboxLocation.Y + this.SliderboxLength;
                            if (this.MoveableY + this.MovableLength < dstY + this.SliderboxLength)
                            {
                                dstY = this.MoveableY + this.MovableLength - this.SliderboxLength;
                            }

                            // 移動可能範囲の先端からの移動量。
                            int movedHeight = dstY - this.MoveableY;

                            // スライダーボックスの上辺が、移動可能範囲全体の何割か。
                            double boxTopPer = (double)movedHeight / (double)this.MovableLength;

                            // データの高さの内、指定割合は何ピクセルか。
                            int pixel = (int)((double)scrollpane.AppearDataSize.Height * boxTopPer);

                            if (scrollpane.ViewBounds.Y != pixel)
                            {
                                scrollpane.SetViewY(pixel);
                                isRefreshData = true;
                                isRefresh     = true;
                            }
                        }
                    }
                }
                else
                {
                    this.PressedPosInSbox = 0;
                }
            }
            else
            {
                //━━━━━
                //水平スクロールバー
                //━━━━━
                if (this.ToMovableBounds().Contains(e.Location))
                {
                    isHit = true;

                    if (this.ToSliderboxBounds().Contains(e.Location))
                    {
                        //━━━━━
                        // スライダーボックス
                        //━━━━━

                        // スライダーボックスの中での、押したマウス座標。
                        // この数字をマウス座標から引くと、スライダーボックスの左端位置が分かります。
                        this.PressedPosInSbox = e.Location.X - this.SliderboxLocation.X;

                        //ystem.Console.WriteLine("水平スライダーボックスを押しました。 this.HScrollbar.PressedPosInSbox=[" + this.HScrollbar.PressedPosInSbox + "]");
                    }
                    else
                    {
                        //━━━━━
                        // スライダーボックスでないところをクリックした場合
                        //━━━━━
                        this.PressedPosInSbox = 0;

                        if (e.Location.X < this.SliderboxLocation.X)
                        {
                            //ystem.Console.WriteLine("移動可能領域(左)を押しました。スライダーボックス1個分左にスクロールしたい。 this.HScrollbar.PressedPosInSbox=[" + this.HScrollbar.PressedPosInSbox + "]");

                            //
                            //
                            // スライダーボックスの縦幅分、スライダーボックスを上に移動します。
                            //
                            // スライダーボックスの座標ではなく、setViewX() で確定します。
                            //
                            //

                            int dstX = this.SliderboxLocation.X - this.SliderboxLength;
                            if (dstX < this.MoveableX)
                            {
                                dstX = this.MoveableX;
                            }

                            // 移動可能範囲の左端からの移動量。
                            int movedWidth = dstX - this.MoveableX;

                            // スライダーボックスの左端が、移動可能範囲全体の何割か。
                            double boxLeftPer = (double)movedWidth / (double)this.MovableLength;

                            // データの高さの内、指定割合は何ピクセルか。
                            int pixel = (int)((double)scrollpane.AppearDataSize.Width * boxLeftPer);

                            if (scrollpane.ViewBounds.X != pixel)
                            {
                                scrollpane.SetViewX(pixel);
                                isRefreshData = true;
                                isRefresh     = true;
                            }
                        }
                        else
                        {
                            //ystem.Console.WriteLine("移動可能領域(右)を押しました。スライダーボックス1個分右にスクロールしたい。 this.HScrollbar.PressedPosInSbox=[" + this.HScrollbar.PressedPosInSbox + "]");

                            //
                            //
                            // スライダーボックスの縦幅分、スライダーボックスを下に移動します。
                            //
                            // スライダーボックスの座標ではなく、setViewY() で確定します。
                            //
                            //

                            int dstX = this.SliderboxLocation.X + this.SliderboxLength;
                            //ystem.Console.WriteLine("dstX(" + dstX + ")=this.HScrollbar.SliderboxLocation.X(" + this.HScrollbar.SliderboxLocation.X + ")+this.HScrollbar.SliderboxLength(" + this.HScrollbar.SliderboxLength + ")");
                            //ystem.Console.WriteLine("this.HScrollbar.MoveableX(" + this.HScrollbar.MoveableX + ")+this.HScrollbar.MovableLength(" + this.HScrollbar.MovableLength + ")<dstX(" + dstX + ")");
                            if (this.MoveableX + this.MovableLength < dstX + this.SliderboxLength)
                            {
                                //ystem.Console.WriteLine("dstX(" + dstX + ")=this.HScrollbar.MoveableX(" + this.HScrollbar.MoveableX + ")+this.HScrollbar.MovableLength(" + this.HScrollbar.MovableLength + ")");
                                dstX = this.MoveableX + this.MovableLength - this.SliderboxLength;
                            }

                            // 移動可能範囲の先端からの移動量。
                            int movedWidth = dstX - this.MoveableX;
                            //ystem.Console.WriteLine("movedWidth(" + movedWidth + ")=dstX(" + dstX + ")-this.HScrollbar.MoveableX(" + this.MoveableX + ")");

                            // スライダーボックスの左辺が、移動可能範囲全体の何割か。
                            double boxLeftPer = (double)movedWidth / (double)this.MovableLength;
                            //ystem.Console.WriteLine("boxLeftPer(" + boxLeftPer + ")=movedWidth(" + movedWidth + ")/this.HScrollbar.MovableLength(" + this.MovableLength + ")");

                            // データの高さの内、指定割合は何ピクセルか。
                            int pixel = (int)((double)scrollpane.AppearDataSize.Width * boxLeftPer);
                            //ystem.Console.WriteLine("pixel(" + pixel + ")=this.AppearDataSize.Width(" + scrollpane.AppearDataSize.Width + ")×boxLeftPer(" + boxLeftPer + ")");

                            if (scrollpane.ViewBounds.X != pixel)
                            {
                                scrollpane.SetViewX(pixel);
                                isRefreshData = true;
                                isRefresh     = true;
                            }
                        }
                    }
                }
                else
                {
                    this.PressedPosInSbox = 0;
                }
            }
        }