আমি বোরল্যান্ডের টার্বো সি ++ পরিবেশে এটি দেখেছি, তবে আমি যে সি # অ্যাপ্লিকেশনটিতে কাজ করছি তার জন্য কীভাবে এটি ব্যবহার করবেন তা নিশ্চিত নই। সন্ধানের জন্য কি সেরা অনুশীলন বা গোটচস রয়েছে?
আমি বোরল্যান্ডের টার্বো সি ++ পরিবেশে এটি দেখেছি, তবে আমি যে সি # অ্যাপ্লিকেশনটিতে কাজ করছি তার জন্য কীভাবে এটি ব্যবহার করবেন তা নিশ্চিত নই। সন্ধানের জন্য কি সেরা অনুশীলন বা গোটচস রয়েছে?
উত্তর:
কিছু নমুনা কোড:
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);
}
}
io.File
উইন্ডোজ ভিস্তা / উইন্ডোজ security সুরক্ষা অধিকার সম্পর্কে সচেতন থাকুন - আপনি যদি প্রশাসক হিসাবে ভিজ্যুয়াল স্টুডিও চালাচ্ছেন তবে আপনি যখন ভিজ্যুয়াল স্টুডিওর মধ্যে থেকে চালনা করেন তখন কোনও প্রোগ্রাম-অ-প্রশাসক এক্সপ্লোরার উইন্ডো থেকে আপনার প্রোগ্রামটিতে টেনে আনতে পারবেন না। টানা সম্পর্কিত ঘটনা গুলিতে আগুনও লাগবে না! আমি আশা করি এটি অন্য কাউকে তাদের জীবনের ঘন্টা নষ্ট না করার জন্য সাহায্য করবে ...
উইন্ডোজ ফর্মগুলিতে, নিয়ন্ত্রণের অনুমোদনপ্রাপ্ত সম্পত্তি সেট করুন, তারপরে ড্রাগগ্রেটার ইভেন্ট এবং ড্র্যাগড্রপ ইভেন্টের জন্য শুনুন।
যখন DragEnter
ঘটনা দাবানল, সেট যুক্তি AllowedEffect
কেউ (যেমন ব্যতীত অন্য কিছু e.Effect = DragDropEffects.Move
)।
যখন DragDrop
ঘটনা আগুন, আপনি স্ট্রিং একটি তালিকা পাবেন। প্রতিটি স্ট্রিং হ'ল ফাইলটি ফেলে দেওয়ার পুরো পথ।
গোটচা সম্পর্কে আপনার সচেতন হওয়া দরকার। আপনি যে কোনও ক্লাসকে ড্রাগ / ড্রপ অপারেশনে ডেটাঅবজেক্ট হিসাবে ঘুরে দেখছেন সেটিকে সিরিয়ালাইজ করতে হবে। সুতরাং যদি আপনি কোনও বিষয়বস্তু চেষ্টা করে পাস করে যান এবং এটি কাজ না করে থাকে তবে নিশ্চিত হয়ে নিন যে এটি অবশ্যই সিরিয়াল হিসাবে চিহ্নিত হতে পারে almost এটি আমাকে কয়েকবার ধরে ফেলেছে!
তবুও আরেকটি গোছা:
ড্র্যাগ-ইভেন্টগুলি কল করে এমন ফ্রেমওয়ার্ক কোড সমস্ত ব্যতিক্রম গ্রাস করে। আপনি মনে করতে পারেন যে আপনার ইভেন্ট কোডটি সুষ্ঠুভাবে চলছে, যখন এটি পুরো জায়গা জুড়ে ব্যতিক্রম ঘটাচ্ছে। ফ্রেমওয়ার্কটি তাদের চুরি করে কারণ আপনি সেগুলি দেখতে পাচ্ছেন না।
এই কারণেই আমি এই ইভেন্ট হ্যান্ডলারগুলিতে সর্বদা একটি চেষ্টা / ধরার চেষ্টা করি, তাই আমি জানি তারা কোনও ব্যতিক্রম ছুঁড়ে ফেলেছে কিনা। আমি সাধারণত একটি ডিবাগার রাখি re ব্রেক (); ধরার অংশে
মুক্তির আগে, পরীক্ষার পরে, যদি সবকিছু আচরণ করা মনে হয়, তবে আমি এগুলি বাদ দিয়েছি বা বাস্তব ব্যতিক্রম হ্যান্ডলিংয়ের সাথে প্রতিস্থাপন করছি।
অন্য একটি সাধারণ গ্যাচা ভাবছে আপনি ফর্ম ড্রাগাগোভার (বা ড্রাগইন্টার) ইভেন্টগুলিকে উপেক্ষা করতে পারবেন। আমি সাধারণত মঞ্জুরিপ্রাপ্ত সেট সেট করার জন্য ফর্মের ড্রাগাগোভার ইভেন্টটি এবং তারপরে বাদ দেওয়া ডেটা হ্যান্ডেল করার জন্য একটি নির্দিষ্ট নিয়ন্ত্রণের ড্র্যাগড্রপ ইভেন্ট ব্যবহার করি।
এখানে এমন কিছু যা আমি ফাইল এবং / অথবা ফাইলগুলিতে পূর্ণ ফোল্ডারগুলি ড্রপ করতে ব্যবহার করি। আমার ক্ষেত্রে আমি *.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);
}
}
আপনি উইনফর্ম এবং ডাব্লুপিএফ-এ ড্রাগ ও ড্রপ প্রয়োগ করতে পারেন।
আপনার মাউসমেভ ইভেন্টটি যুক্ত করা উচিত:
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));
}
...
}