マウスポインターの下でコントロールの名前を取得する方法(各コントロールにイベントハンドラーを作成することなく)?
-
27-10-2019 - |
質問
私はmdichildとdraganddropのイベントハンドラーを持っているので、私のフォームに画像ファイルをドロップすると、その画像でpicturebox(name = dpic)が作成されます。
DPIC_Click用の別のイベントハンドラーがあるため、画像をクリックすると、フォームのテキストがその画像の名前です。
初めて画像をドロップした後、同じ名前の2つのコトロールを持つことができないため、別のDPICが作成されます。 C#は自動的に名前を変更し、私のイベントハンドラーは私がドロップした最後の画像に対してのみ機能させます。マウスポインターの下にあるコントロールの名前を取得するMdichildのイベントハンドラーを作成できたら、単に変更できます。私が指している画像をバックアップします。
アップデート
これが私のコードです、私は私のmdichildをドロップするためのイベントハンドラーを作成しました:
void mdiChild_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
dpic = new PictureBox() ;
string[] filepath = (string[])e.Data.GetData(DataFormats.FileDrop);
Image image = Image.FromFile(filepath[0]);
dpic.Image = image;
dpic.Tag = Path.GetFileName(filepath[0]);
this.ActiveMdiChild.Controls.Add(dpic);
dpic.ContextMenuStrip = this.contextMenuStrip1;
this.ActiveMdiChild.Refresh();
dpic.BringToFront();
this.ActiveMdiChild.ActiveControl = dpic;
dpic.Click += new EventHandler(dpic_Click);
// _____this helped me do it_________________________________________________
foreach (Control c in this.ActiveMdiChild.Controls)
{
c.Click += new EventHandler(c_Click);
}
// ________________________________________________________________________
}
}
解決
あなたが探しているのは送信者です。送信者は、どの画像がクリックされたかを知り、その名前を取得できるようにします。
PictureBox picSender = (PictureBox)sender;
label1.Text = picSender.Name;
編集:Pic_Clickイベントにそれを置きます
他のヒント
私はあなたがここで何をしたいのかを正確に理解していません。おそらく、フォームに画像をドロップした新しい画像ボックスを重ねることはできますか?
そうである場合は、aを使用できます
List<PictureBox> picboxes = new List<PictureBox>();
そしてあなたがするところ:
dpic = new PictureBox() ;
への変更
PictureBox dpic = new PictureBox() ;
picboxes.Add(dpic);
this.Controls.Add(dpic);
ただし、無制限のコントロールを宣言することはできないことに注意してください。
所属していません StackOverflow