আমি কীভাবে একটি অ্যাপ্লিকেশনগুলিতে ফাইলগুলি টেনে আনতে পারি?


251

আমি বোরল্যান্ডের টার্বো সি ++ পরিবেশে এটি দেখেছি, তবে আমি যে সি # অ্যাপ্লিকেশনটিতে কাজ করছি তার জন্য কীভাবে এটি ব্যবহার করবেন তা নিশ্চিত নই। সন্ধানের জন্য কি সেরা অনুশীলন বা গোটচস রয়েছে?


আপনি কি বলতে চান একটি সি # অ্যাপ্লিকেশন বা সি # আইডিইতে ড্রাগ এবং ড্রপ?
জেমসসগ্রু

4
উত্স, সি # অ্যাপ্লিকেশন। তিনি তার অ্যাপ্লিকেশনটিকে ড্র্যাগ এবং ড্রপ বান্ধব করে তুলতে চান।
SLA80

3
লিঙ্কে আরও দরকারী উত্তর ।
ভেঙ্কটেশ কুমার

উত্তর:


505

কিছু নমুনা কোড:

  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      this.AllowDrop = true;
      this.DragEnter += new DragEventHandler(Form1_DragEnter);
      this.DragDrop += new DragEventHandler(Form1_DragDrop);
    }

    void Form1_DragEnter(object sender, DragEventArgs e) {
      if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
    }

    void Form1_DragDrop(object sender, DragEventArgs e) {
      string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
      foreach (string file in files) Console.WriteLine(file);
    }
  }

56
দাবি অস্বীকার: আপনি উইন্ডোজ in-এ অ্যাডমিন হিসাবে ভিজ্যুয়াল স্টুডিও চালাচ্ছেন বা আপনি যদি অ্যাডমিন হিসাবে আপনার প্রোগ্রামটি চালান তবে এটি ডিবাগে কাজ করতে পারে না। এখানে
ম্যাথিউউ

আপনি কীভাবে ফাইলগুলির বিষয়বস্তু পাবেন?
বার্নসিস

3
@ বার্নসিস যদি আপনার কাছে ড্র্যাগ অপারেশন থেকে ফাইলপথ থাকে তবে আপনি এটি ব্যবহার করে পড়তে পারেনio.File
স্মিথ

1
উঃ, না মঞ্জুরিপ্রাপ্ত সম্পত্তিটিকে ডিজাইনারটিতে সত্যে সেট করুন এবং সেখান থেকে এটি যুক্ত করুন।
হ্যানস প্যাস্যান্ট

2
Anyালাই কি (string[])কোনও FileDropফর্ম্যাটড ড্রপের জন্য নিরাপদ ? অর্থাত্, এমন কি জেনারেট করা সম্ভব FileDropযা অবৈধ কাস্ট ব্যতিক্রম ঘটায় string[]? ডক্স থেকে এটি বের করতে আমার সমস্যা হচ্ছে ।
kdbanman

140

উইন্ডোজ ভিস্তা / উইন্ডোজ security সুরক্ষা অধিকার সম্পর্কে সচেতন থাকুন - আপনি যদি প্রশাসক হিসাবে ভিজ্যুয়াল স্টুডিও চালাচ্ছেন তবে আপনি যখন ভিজ্যুয়াল স্টুডিওর মধ্যে থেকে চালনা করেন তখন কোনও প্রোগ্রাম-অ-প্রশাসক এক্সপ্লোরার উইন্ডো থেকে আপনার প্রোগ্রামটিতে টেনে আনতে পারবেন না। টানা সম্পর্কিত ঘটনা গুলিতে আগুনও লাগবে না! আমি আশা করি এটি অন্য কাউকে তাদের জীবনের ঘন্টা নষ্ট না করার জন্য সাহায্য করবে ...


6
@Wayne Uroda: আমি ভেবেছিলাম আমার কোড কাজ করছে না ছিল - নরক এটা আমার একটা বড় ভালো "কোন প্রতীক" দিচ্ছিলেন en.wikipedia.org/wiki/File:ProhibitionSign2.svg । তারপরে আমি এই উত্তরটি দেখেছি এবং একটি প্রশাসকবিহীন হিসাবে ভিএস চালিয়েছি এবং এটি কাজ করে! অসংখ্য ধন্যবাদ.
ডেরেক ডাব্লু

এর জন্য আপনাকে যথেষ্ট ধন্যবাদ জানাতে পারি না, যদি আমি এই পোস্টটি খুঁজে না পাই তবে আমি হাল ছেড়ে দিতাম! এটি আপনার উইন্ডোজ 10-তে বৈধ যেমনটি আপনি লিখেছিলেন ঠিক তেমন 2017
Culme

42

উইন্ডোজ ফর্মগুলিতে, নিয়ন্ত্রণের অনুমোদনপ্রাপ্ত সম্পত্তি সেট করুন, তারপরে ড্রাগগ্রেটার ইভেন্ট এবং ড্র্যাগড্রপ ইভেন্টের জন্য শুনুন।

যখন DragEnterঘটনা দাবানল, সেট যুক্তি AllowedEffectকেউ (যেমন ব্যতীত অন্য কিছু e.Effect = DragDropEffects.Move)।

যখন DragDropঘটনা আগুন, আপনি স্ট্রিং একটি তালিকা পাবেন। প্রতিটি স্ট্রিং হ'ল ফাইলটি ফেলে দেওয়ার পুরো পথ।


16

গোটচা সম্পর্কে আপনার সচেতন হওয়া দরকার। আপনি যে কোনও ক্লাসকে ড্রাগ / ড্রপ অপারেশনে ডেটাঅবজেক্ট হিসাবে ঘুরে দেখছেন সেটিকে সিরিয়ালাইজ করতে হবে। সুতরাং যদি আপনি কোনও বিষয়বস্তু চেষ্টা করে পাস করে যান এবং এটি কাজ না করে থাকে তবে নিশ্চিত হয়ে নিন যে এটি অবশ্যই সিরিয়াল হিসাবে চিহ্নিত হতে পারে almost এটি আমাকে কয়েকবার ধরে ফেলেছে!


14

তবুও আরেকটি গোছা:

ড্র্যাগ-ইভেন্টগুলি কল করে এমন ফ্রেমওয়ার্ক কোড সমস্ত ব্যতিক্রম গ্রাস করে। আপনি মনে করতে পারেন যে আপনার ইভেন্ট কোডটি সুষ্ঠুভাবে চলছে, যখন এটি পুরো জায়গা জুড়ে ব্যতিক্রম ঘটাচ্ছে। ফ্রেমওয়ার্কটি তাদের চুরি করে কারণ আপনি সেগুলি দেখতে পাচ্ছেন না।

এই কারণেই আমি এই ইভেন্ট হ্যান্ডলারগুলিতে সর্বদা একটি চেষ্টা / ধরার চেষ্টা করি, তাই আমি জানি তারা কোনও ব্যতিক্রম ছুঁড়ে ফেলেছে কিনা। আমি সাধারণত একটি ডিবাগার রাখি re ব্রেক (); ধরার অংশে

মুক্তির আগে, পরীক্ষার পরে, যদি সবকিছু আচরণ করা মনে হয়, তবে আমি এগুলি বাদ দিয়েছি বা বাস্তব ব্যতিক্রম হ্যান্ডলিংয়ের সাথে প্রতিস্থাপন করছি।


9

অন্য একটি সাধারণ গ্যাচা ভাবছে আপনি ফর্ম ড্রাগাগোভার (বা ড্রাগইন্টার) ইভেন্টগুলিকে উপেক্ষা করতে পারবেন। আমি সাধারণত মঞ্জুরিপ্রাপ্ত সেট সেট করার জন্য ফর্মের ড্রাগাগোভার ইভেন্টটি এবং তারপরে বাদ দেওয়া ডেটা হ্যান্ডেল করার জন্য একটি নির্দিষ্ট নিয়ন্ত্রণের ড্র্যাগড্রপ ইভেন্ট ব্যবহার করি।


7

এখানে এমন কিছু যা আমি ফাইল এবং / অথবা ফাইলগুলিতে পূর্ণ ফোল্ডারগুলি ড্রপ করতে ব্যবহার করি। আমার ক্ষেত্রে আমি *.dwgকেবল ফাইলগুলির জন্য ফিল্টারিং করছিলাম এবং সমস্ত সাবফোল্ডার অন্তর্ভুক্ত করার জন্য বেছে নিয়েছিলাম।

fileListএকটি হল IEnumerableবা অনুরূপ আমার ক্ষেত্রে একটি WPF নিয়ন্ত্রণ করতে বাধ্য হয় ...

var fileList = (IList)FileList.ItemsSource;

সেই কৌশলটির বিশদ জানতে https://stackoverflow.com/a/19954958/492 দেখুন ।

ড্রপ হ্যান্ডলার ...

  private void FileList_OnDrop(object sender, DragEventArgs e)
  {
    var dropped = ((string[])e.Data.GetData(DataFormats.FileDrop));
    var files = dropped.ToList();

    if (!files.Any())
      return;

    foreach (string drop in dropped)
      if (Directory.Exists(drop))
        files.AddRange(Directory.GetFiles(drop, "*.dwg", SearchOption.AllDirectories));

    foreach (string file in files)
    {
      if (!fileList.Contains(file) && file.ToLower().EndsWith(".dwg"))
        fileList.Add(file);
    }
  }

3

যিহূদা হিমাঙ্গো এবং হান্স প্যাস্যান্টের সমাধান ডিজাইনারে উপলব্ধ (আমি বর্তমানে ভিএস ২০১৫ ব্যবহার করছি):

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


0

আপনি উইনফর্ম এবং ডাব্লুপিএফ-এ ড্রাগ ও ড্রপ প্রয়োগ করতে পারেন।

  • উইনফর্ম (অ্যাপ্লিকেশন উইন্ডো থেকে টেনে আনুন)

আপনার মাউসমেভ ইভেন্টটি যুক্ত করা উচিত:

private void YourElementControl_MouseMove(object sender, MouseEventArgs e)

    {
     ...
         if (e.Button == MouseButtons.Left)
         {
                 DoDragDrop(new DataObject(DataFormats.FileDrop, new string[] { PathToFirstFile,PathToTheNextOne }), DragDropEffects.Move);
         }
     ...
    }
  • উইনফর্ম (অ্যাপ্লিকেশন উইন্ডোতে টানুন)

আপনার ড্র্যাগড্রপ ইভেন্টটি যুক্ত করা উচিত:

ব্যক্তিগত অকার্যকর আপনারElementControl_DragDrop (অবজেক্ট প্রেরক, DragEventArgs ই)

    {
       ...
       foreach (string path in (string[])e.Data.GetData(DataFormats.FileDrop))
            {
                File.Copy(path, DirPath + Path.GetFileName(path));
            }
       ...
    }

সম্পূর্ণ কোড সহ উত্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.