2017-05-11 13 views
0

フォームは、クリックして特定の場所にドロップする4つのラベルで構成されています。私はmovObjをタイプとして設定できる必要があります。 Label1 = movオブジェクト。私はこの質問をして、各ラベル名をmovObjに書きます。私は各ラベルのクリックイベントにこのコード全体を入れることができますが、コードはできるだけ短くするのが好きです。病気はドロップイベントを処理した後、私はこれを考え出したので、この質問はそれに関するものではありません。クリックしたラベルにmovObjを設定するだけです。その後、それはその所有に移ることができます。ヘルプは高く評価しました。C#Visual Studio Windowsフォームマウスを使用したオブジェクトの移動

private Point firstPoint = new Point(); 
    public void INIT() 
    { 
     movObj.MouseDown += (ss, ee) => 
     { 
      if (ee.Button == System.Windows.Forms.MouseButtons.Left) { firstPoint = Control.MousePosition; } 
     }; 

     movObj.MouseMove += (ss, ee) => 
     { 
      if (ee.Button == System.Windows.Forms.MouseButtons.Left) 
      { 
       //creates temp point 
       Point temp = Control.MousePosition; 
       Point res = new Point(firstPoint.X - temp.X, firstPoint.Y - temp.Y); 

       //apply value to object 
       movObj.Location = new Point(movObj.Location.X - res.X, movObj.Location.Y - res.Y); 

       //updates first point 
       firstPoint = temp; 
      } 
     }; 
    } 

enter image description here

答えて

1

イベントの署名のようなものです:

あなたのコードで
event(object sender, EventArgs e) 

sssenderで、eeeです。

コード内にeeを使用しているため、EventArgsの使い方を知っているようです。今度は、senderがイベントの原因となったオブジェクトです。あなたの場合、それはクリックされたラベルです。

Label myLabel = (Label)sender; 

をし、その後、あなたはmyLabel.Textを使用して、そのテキストを取得することができます:あなたは、単にこのようobjectからLabelにキャストすることができます。

+0

このコードは、私が達成しようとしていることを今まで必要としていたのは初めてのことです。私はあなたが言ったようにparemneterを設定しようとしましたが、それは動作していません。これは、Windowsフォーム上の私のラベル名の1つに設定されているので、movObjと何か関係がありますか?私はちょうど私のコード内の型変数として保存することはできませんし、起動するために私のラベルの選択肢に書き込みますか?迅速な返信ありがとう – PaulD1983

+0

私はあなたが達成しようとしていることを理解していません。あなたの質問を編集し、 'movObj'に値を代入するコードと正確に何をしたいのかを追加してください。 'movObj'が私のラベル名*にセットされていると言っているなら、"ラベル名 "はどういう意味ですか?ラベルコントロールそのものを意味するなら、あなたが提供したコードは必要ありません。はい、タイプ変数として保存することができますが、あなたが何を意味するのか分かりません。 –

関連する問題