2013-07-26 6 views
3

기본적으로 텍스트 상자에 레이블을 끌어서 텍스트 상자와 레이블을 사용하여 끌어서 놓기를 수행하고 있습니다. 텍스트 상자 및 레이블은 동일한 for 루프에서 작성됩니다.WPF C# 끌어서 놓기

는 동적으로이 같은 텍스트 상자를 (텍스트 상자가 드롭 대상) 만들었습니다

TextBox tbox = new TextBox(); 
      tbox.Width = 250; 
      tbox.Height = 50; 
      tbox.AllowDrop = true; 
      tbox.FontSize = 24; 
      tbox.BorderThickness = new Thickness(2); 
      tbox.BorderBrush = Brushes.BlanchedAlmond;  
      tbox.Drop += new DragEventHandler(tbox_Drop); 

      if (lstQuestion[i].Answer.Trim().Length > 0) 
      { 

       wrapPanel2.Children.Add(tbox); 
       answers.Add(lbl.Content.ToString()); 
       MatchWords.Add(question.Content.ToString(), lbl.Content.ToString()); 

      } 

나는이 또한 dynanmically이 같은 레이블 (라벨이 드래그 대상) 작성 :

Dictionary<string, string> shuffled = Shuffle(MatchWords); 
     foreach (KeyValuePair<string, string> s in shuffled) 
     { 
      Label lbl = new Label(); 
      lbl.Content = s.Value; 
      lbl.Width = 100; 
      lbl.Height = 50; 
      lbl.FontSize = 24;    
      lbl.DragEnter += new DragEventHandler(lbl_DragEnter); 
      lbl.MouseMove += new MouseEventHandler(lbl_MouseMove); 
      lbl.MouseDown +=new MouseButtonEventHandler(lbl_MouseDown); 
    //  lbl.MouseUp +=new MouseButtonEventHandler(lbl_MouseUp); 
      dockPanel1.Children.Add(lbl); 
     } 

I을 여기에 2 가지 이슈가 있습니다.

첫 번째. MessageBox.Show (뭔가)를 표시하기 위해 tbox.drop 이벤트를 사용하고 있습니다. 드래그 대상이 드롭되고 있지만 작동하지 않는 경우 messagebox를 표시합니다. 나는 또한 끌기 대상이 내가 다른 드래그 대상이있을 수 있기 때문에 떨어 이전에 TBOX 삭제 될 때 tbox.Text을 지우려면,

 private void tbox_Drop(object sender, DragEventArgs e) 
    { 
     MessageBox.Show("Are you sure?"); 
    } 

둘째 :

여기 내 코드입니다. 그래서 tbox.Text를 지우고 대상을 텍스트 상자로 드래그 할 때마다 드래그 대상을 드롭합니다.

어떻게하면됩니까? 나는이 이벤트에 사용해야하며 이벤트 핸들러에서 tbox에 어떻게 액세스해야합니까?

+0

마우스 다운 이벤트에서 수행중인 것을 보여줄 수 있습니까? – Nitesh

답변

2

그것은 나를 위해 일했습니다. 그냥 드래그 용도로 사용하는 경우

private void lbl_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    Label _lbl = sender as Label; 
    DragDrop.DoDragDrop(_lbl, _lbl.Content, DragDropEffects.Move); 
} 

당신은 Label에 대한 MouseMoveDragEnter 이벤트가 필요하지 않습니다. 아래 그림과 같이

것은 TextBox에 대한 PreviewDropDrop 이벤트를 바꾸기 :이

tbox.PreviewDrop += new DragEventHandler(tbox_PreviewDrop); 

private void tbox_PreviewDrop(object sender, DragEventArgs e) 
{ 
    (sender as TextBox).Text = string.Empty; 
} 
+0

빠른 답장과 노력에 감사드립니다. – user2376998

+0

다음은 좋은 예입니다. https://wpf.2000things.com/2013/01/09/730-use-querycontinuedrag-event-to-know-when -mouse-button-state-changes / – AzzamAziz

0

드래그 할 텍스트 상자에

tbox.Drop += new DragEventHandler(tbox_Drop); 

은 (mousedown 이벤트를 추가)

private void dragMe_MouseDown(object sender, MouseButtonEventArgs e) 
     { 
      TextBox tb = sender as TextBox; 
      // here we have pass the textbox object so that we can use its all property on necessary 
      DragDrop.DoDragDrop(tb, tb, DragDropEffects.Move); 
     } 

Drop하려는 TextBox (드롭 e 추가 통풍구 및 허용 확인란으로 표시된 것을 확인해야 함)

private void dropOnMe_Drop(object sender, DragEventArgs e) 
{ 

      TextBox tb= e.Data.GetData(typeof(TextBox)) as TextBox; 
      // we have shown the content of the drop textbox(you can have any property on necessity) 
      dropOnMe.Content = tb.Content; 
}