質問

そこで、Googleで少し検索して、マウスでボタンをドラッグするコードを見つけました。これらのどれも実際に私のために働いていなかったとしても、私は多くを見つけました。

だから私はあなたに尋ねています! :-)

私が自分の形で機能しようとしているコード:

bool isDragged = false;
  Point ptOffset;
  private void button1_MouseDown( object sender, MouseEventArgs e )
  {
     if ( e.Button == MouseButtons.Left )
     {
        isDragged = true;
        Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y));

        ptOffset = new Point();
        ptOffset.X = button1.Location.X - ptStartPosition.X;
        ptOffset.Y = button1.Location.Y - ptStartPosition.Y;
     }
     else
     {
        isDragged = false;
     }
  }

  private void button1_MouseMove( object sender, MouseEventArgs e )
  {
     if ( isDragged )
     {
        Point newPoint = button1.PointToScreen(new Point(e.X, e.Y));
        newPoint.Offset(ptOffset);
        button1.Location = newPoint;
     }
  }

  private void button1_MouseUp( object sender, MouseEventArgs e )
  {
     isDragged = false;
  }

もちろん、PictureBox1をButton1に変更しました。

しかし、私はこれを機能させることができません。

理由を知っている人は誰ですか?

ああ、これをすべてのボタンで使用したいので、すべてのボタンで動作させるためにButton1を何を置き換える必要がありますか?

-btw、Visual Studio Expressを使用しています。

前もって感謝します!

役に立ちましたか?

解決

Windowsフォームに関しては、本当に貼り付けをコピーするだけですが

あなたが投稿したコードは、実際にはそれ自体では何もしません!

作業するには、コントロールのMousedown()およびMousemove()イベントをそれらの方法に配線する必要があります。

  1. フォーム(PictureBox1)のコントロールを選択します。
  2. プロパティペイン(デフォルトで右下)で、「Lightning Bolt」アイコンをクリックして、そのコントロールのイベントのリストを取得します。
  3. を見つける MouseDown ドロップダウンを右に入力して変更します pictureBox1_MouseDown.
  4. を見つける MouseMove ドロップダウンを右に入力して変更します pictureBox1_MouseMove.

次に、それを実行し、PictureBox1をドラッグします。

編集:以下のコメントで概説されているように、複数のコントロールに対してコードを機能させる方法を次に示します。

    bool isDragged = false;
    Point ptOffset;

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            isDragged = true;
            Button btn = (Button)sender;
            ptOffset = new Point(btn.Location.X - Cursor.Position.X, btn.Location.Y - Cursor.Position.Y);
        }
        else
        {
            isDragged = false;
        }
    }

    private void button1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDragged)
        {
            Point newPoint = Cursor.Position;
            newPoint.Offset(ptOffset);
            Button btn = (Button)sender;
            btn.Location = newPoint;
        }
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        isDragged = false;
    }

他のヒント

わかりました、良いニュース:うまくいけば、完了したらCSIデスクトップレイアウトができます。

それほど良いニュース:あなたは間違ったことをしようとしていると思います。

私はあなたがWinformsを使用していると仮定していますが、アイデアはWPFで同じでなければなりません。プログラムを実行すると、レイアウトが設定されます(たとえば、ウィンドウのサイズを変更すると、たとえば絶対x、y位置で設定するときに静的に変更されます)。

あなたがやりたいのは、すべてのボイラープレートコードを作成することの利点を取得したいのですが、実行時に動的に変更したい...

アプローチを再考し、一歩ずつこの一歩を踏み出す必要があると思います(結局、Microsoftが今のところにある場所にGUIを獲得するのに何年もかかりました...クールな未来を得るのに時間がかかりますGUIが出ています)。

赤ちゃんの一歩を踏み出しますが、全体像に留意してください:

  • キャンバスを定義することから始めます。
  • その後、ボタンを配置できます。
  • その後、キャンバスにそのボタンを移動することで馬鹿げています。 (質問にあるコードは、キャンバス上のオブジェクトで機能する必要があります)。

そこから、目的地に近づくための措置を講じてください...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top