কোনও ফোল্ডার নির্বাচন করতে ওপেনফায়ালডায়লগ কীভাবে ব্যবহার করবেন?


296

ব্যবহারবিধি OpenFileDialogফোল্ডার নির্বাচন করবেন?

আমি নিম্নলিখিত প্রকল্পটি ব্যবহার করতে যাচ্ছিলাম: https://github.com/scottwis/OpenFileOrFolderDialog

তবে, আমি একটি সমস্যার মুখোমুখি হয়েছি। এটি GetOpenFileNameফাংশন এবং OPENFILENAMEকাঠামো ব্যবহার করে । এবং OPENFILENAMEসদস্যের নাম রয়েছে templateID। এটি ডায়ালগ টেমপ্লেটের জন্য সনাক্তকারী। এবং প্রকল্পটিতে res1.rcফাইল এবং টেম্পলেটযুক্ত ডায়ালগও রয়েছে। তবে কীভাবে এই ফাইলটি আমার সি # প্রকল্পের সাথে সংযুক্ত করবেন তা আমি বুঝতে পারি না।

OpenFileDialogফোল্ডার নির্বাচন করার জন্য একটি আরও ভাল উপায় আছে ?


আপনি যদি সম্পাদকের সাহায্যে প্রকল্প ফাইলটি খুলেন তবে নীচের অংশে আপনি কিছু অতিরিক্ত বৈশিষ্ট্য লক্ষ্য করবেন: <ভিসিআইএনকিউলপথ ...>, <উইন 32 রিসোর্স ...> এবং <টার্গেটের নাম = "পূর্বে বিল্ড" ...>। আপনি দেখতে পাবেন যে এটি রিসোর্স ফাইল res1.rc সংকলন করতে rc.exe চালায় rc (আপনার প্রকল্পে "রিসোর্স.এইচ" অনুলিপি করার বিষয়টি নিশ্চিত হন)। আপনার কাছে ভিজ্যুয়ালসি ইনস্টল করা আছে এবং ভিসিআইনক্লুডপথটি কোনও সঠিক স্থানে (গিথুবের একটি পয়েন্টটি ভিসি 9.0 সংস্করণে দেখায় এবং আপনার এটি পরিবর্তন করার প্রয়োজন হতে পারে) তা নিশ্চিত করুন। .Rc ফাইলটি সংকলনের পরে, ফলস্বরূপ .res ফাইলটি আপনার উইন 32 রিসোর্স ডাইরেক্টিভের সাথে এক্সিকিউটেবলের সংস্থান হিসাবে যুক্ত করা হয়।
মিসটিকা

3
একটা hackish OpenFileDialog যেখানে ব্যবহার সমাধান ValidateNamesএবং CheckFileExistsমিথ্যা উভয় সেট এবং FileNameযা নির্দেশ করে ডিরেক্টরি নির্বাচিত করা হয় একটি উপহাস মান দেওয়া হয়। আমি হ্যাক বলি কারণ এটি কোনও ফোল্ডারটি কীভাবে নির্বাচন করবেন তা ব্যবহারকারীদের কাছে বিভ্রান্ত করছে। একই ডায়লগ থেকে ফাইল বা ফোল্ডার নির্বাচন করুন
ড্যানিয়েল বলিঞ্জার

1
ওপেনফাইলডায়লগ-হ্যাকের দিকে ইঙ্গিত করার জন্য থ্যাঙ্কস ড্যান! এটি ফোল্ডার ব্রাউজারডায়ালগের চেয়ে ভাল, কারণ ওএফডি বুকমার্কযুক্ত ফোল্ডারগুলি ইত্যাদি দেখায়, তাই প্রত্যেকে - বিশেষত বড় বড় সংস্থাগুলিতে - তাদের বাজে খোঁজ খুঁজে পায়। এফবিডি সে জায়গাগুলিতে খুব ভাল কিছু করতে পারে না।
JayC667

1
@ কমরেডজাইকুল আমি আমার মন্তব্যকে উত্তরে রূপান্তর করেছি । আমি এটি বেশ কয়েকবার চেষ্টা করেছি এবং "ফাইল পাওয়া যায় নি" সমস্যা নেই। আপনি কি একই ওপেনফায়ালডায়ালগ উদাহরণটি পুনরায় ব্যবহার করছেন?
ড্যানিয়েল বলিঞ্জার

1
@DanielBallinger অই, আমি আমার সমস্যা পাওয়া যায় নি, যেহেতু আমি ডায়লগ তৈরি করতে PowerShell ব্যবহার করছি, সেটিং ValidateNamesএবং CheckFileExistsকরতে falseকাজ করছে না, আমি তাদের সেট করার প্রয়োজন 0(অথবা PowerShell ভাল জানুন)
ComradeJoecool

উত্তর:


397

মূলত আপনার প্রয়োজন FolderBrowserDialog ক্লাসটি :

ব্যবহারকারীকে একটি ফোল্ডার নির্বাচন করতে অনুরোধ করে। এই শ্রেণিটি উত্তরাধিকারসূত্রে প্রাপ্ত হতে পারে না।

উদাহরণ:

using(var fbd = new FolderBrowserDialog())
{
    DialogResult result = fbd.ShowDialog();

    if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
    {
        string[] files = Directory.GetFiles(fbd.SelectedPath);

        System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
    }
}

আপনি যদি ডব্লিউপিএফ এ কাজ করেন তবে আপনার উল্লেখটি যুক্ত করতে হবে System.Windows.Forms

আপনি ক্লাসের using System.IOজন্য যোগ করতে হবেDirectory


184
ফোল্ডার ব্রাউজারডায়ালগের ব্যবহারের অভাব রয়েছে। প্রধান অসুবিধাটি হ'ল এটি আপনাকে দ্রুত নেভিগেশনের জন্য উইন্ডোজ এক্সপ্লোরার থেকে ফোল্ডার পাথটি অনুলিপি করার অনুমতি দেয় না, যখন আপনাকে তিনটি স্তরের বেশি ড্রিল করার প্রয়োজন হয় তখন এটি অকেজো করে তোলে। প্রতিটি ফোল্ডারে ড্রিলিং পছন্দসই হয় না বিশেষত যখন স্টোরেজটি ধীর হয় অথবা যখন আপনার কোনও স্তরে প্রচুর ফোল্ডার থাকে।
মিসটিকা

2
প্রশ্নটি বিশেষত ফোল্ডার ব্রাউজারডায়ালগ (এফবিডি) নয়, ফোল্ডার নির্বাচন করতে ওপেনফিলডায়ালগ (ওএফডি) ব্যবহার সম্পর্কে। আমি একমত যে এফবিডি ব্যবহারকারীর দৃষ্টিকোণ থেকে ভয়ঙ্কর।
মাইকেল পাউলুকোনিস

25
বিকল্পভাবে ভাঙ্গা UI 'তে সঙ্গে এই ডায়ালগটি, একটি ব্যবহার CommonOpenFileDialog : new CommonOpenFileDialog { IsFolderPicker = true }
আনবিস

113
দয়া করে, এটি কখনও ব্যবহার করবেন না ! আমি মনে করি একজন ব্যবহারকারী হিসাবে আমি এই দরিদ্র প্রোগ্রামারদের দোষ দিয়েছিলাম যা এই ভয়ঙ্কর ট্রি ভিউ ডায়ালগ (যা কেবলমাত্র ফোল্ডার ব্রাউজারডায়ালগ) দিয়ে আরও একটি অ্যাপ তৈরি করেছে । এটি সম্পূর্ণরূপে অব্যবহৃত: একগুচ্ছ রুট ডায়ার, একটি অনুপস্থিত প্রিয় প্যানেল এবং সর্বাধিক ভয়াবহ - আপনি সেখানে কোনও রাস্তাও আটকে দিতে পারবেন না! এবং এখন একজন প্রোগ্রামার হিসাবে আমি এটি ব্যবহার করার জন্য একটি পরামর্শ দেখছি ... দয়া করে, এটি করবেন না।
হাই-এঞ্জেল

2
ফোল্ডার ব্রাউজারডায়ালগের অন্য সমস্ত কিছুর পাশাপাশি একটি বড় ত্রুটি রয়েছে। এটি শেষ নির্বাচিত পথটি মনে রাখে না!
আলেএক্স_

252

ভবিষ্যত ব্যবহারকারীরা যারা FolderBrowserDialogব্যবহারটি এড়াতে চান তাদের জন্য একটি নোট হিসাবে , মাইক্রোসফ্ট একবার উইন্ডোজএপিকোডপ্যাক নামে একটি আইপিআই প্রকাশ করেছিল যার একটি সহায়ক ডায়ালগ ছিল CommonOpenFileDialog, এটি একটি IsFolderPickerমোডে সেট করা যেতে পারে । মাইক্রোসফ্ট থেকে নুগেট প্যাকেজ হিসাবে এপিআই উপলব্ধ ।

এটি ইনস্টল এবং ব্যবহার করার জন্য আমার যা প্রয়োজন তা হল CommonOpenFileDialog। (নিউগেট নির্ভরতাগুলি পরিচালনা করেছে)

Install-Package Microsoft.WindowsAPICodePack-Shell

অন্তর্ভুক্ত রেখার জন্য:

using Microsoft.WindowsAPICodePack.Dialogs;

ব্যবহার:

CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C:\\Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    MessageBox.Show("You selected: " + dialog.FileName);
}

35
আমি মনে করি এটি "কোনও ফোল্ডার নির্বাচন করতে ওপেনফায়ালডায়লগ কীভাবে ব্যবহার করবেন?" এর নিকটতম উত্তর ফোল্ডার ব্রাউজ ডায়ালগ খুব অকেজো। এই উত্তরের জন্য আপনাকে ধন্যবাদ।
কোরে

46
এই উত্তর হওয়া উচিত। এবং মনে রাখবেন যে এটি Microsoft.WindowsAPICodePack.Shellব্যবহারের আগে আপনাকে নিউগেটের মাধ্যমে প্যাকেজটি ইনস্টল করতে হবে CommonOpenFileDialog
স্মিভিপিডিয়া

1
আপনি যদি এটি ভিএস2017 দিয়ে ব্যবহার করেন তবে এটি আপনার মূল উইন্ডোটিকে পুনরায় সাজায়।
লোকায়রে

1
FolderBrowserDialogব্যবহারকারীদের জন্য নোট : একাধিক একযোগে এটির ব্যবহার সমস্যা তৈরি করতে পারে। এটি CommonOpenFileDialogআরও ভাল।
আল্পার

9
মাইক্রোসফ্ট মনে হয় এটিকে পুনরায় প্রকাশ করেছেWindowsAPICodePack-Shell
নিউস

32

সেখানে হ্যাকিশ সমাধান রয়েছে OpenFileDialogযেখানে ValidateNamesএবং CheckFileExistsউভয়ই মিথ্যাতে সেট করা আছে এবংFileName নির্দেশ করার একটি ডিরেক্টরি নির্বাচিত করা হয় একটি উপহাস মান দেওয়া হয়।

আমি হ্যাক বলি কারণ এটি কোনও ফোল্ডারটি কীভাবে নির্বাচন করবেন তা ব্যবহারকারীদের কাছে বিভ্রান্ত করছে। তাদের পছন্দসই ফোল্ডারে থাকা দরকার এবং তারপরে কেবল ওপেন টিপুন যখন ফাইলের নাম বলছে "ফোল্ডার নির্বাচন"।

সি # ফোল্ডার নির্বাচন ডায়ালগ

এটি ডেনিস স্টানকভস্কির একই ডায়ালগ থেকে ফাইল বা ফোল্ডার নির্বাচন করুন এর উপর ভিত্তি করে ।

OpenFileDialog folderBrowser = new OpenFileDialog();
// Set validate names and check file exists to false otherwise windows will
// not let you select "Folder Selection."
folderBrowser.ValidateNames = false;
folderBrowser.CheckFileExists = false;
folderBrowser.CheckPathExists = true;
// Always default to Folder Selection.
folderBrowser.FileName = "Folder Selection.";
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
    string folderPath = Path.GetDirectoryName(folderBrowser.FileName);
    // ...
}

আমি দেখছি, হ্যাঁ আমি এটি কাজ করে চলেছি। একটি বিরক্তিকর বিষয় হ'ল Folder Selection.ফাইলের শেষের প্রান্তে এমনটি করা হবে: C:\Folder Selection.আমার ধারণা আপনি এই অক্ষরটিকে সর্বদা স্ট্রিং থেকে মুছে ফেলতে পারেন। এখনও ফোল্ডার
ব্রাউজার

এটি আমার পক্ষে কাজ করে না। এটি আমাকে ফোল্ডার নির্বাচন করতে দেয় না। এটি কেবল তাদের খোলে।
লোকায়রে

1
@ লকিয়েরে যখন আমি বললাম এটি হ্যাক ছিল তখনই আমি এর অর্থ বলছিলাম। দ্বিতীয় অনুচ্ছেদ থেকে নির্দেশাবলী দেখুন।
ড্যানিয়েল বলিঞ্জার

2
@ কমরেডজাইকুল আপনাকে ম্যানুয়ালি ম্যানুয়ালি মুছে ফেলতে হবে না। কোডের সর্বশেষ লাইনটি কী তা স্থির করে: স্ট্রিং ফোল্ডারপথ = পথ .GetDirectoryName (ফোল্ডার ব্রাউজার.ফাইলনাম);
হেরিবার্তো লুগো

উহু! এই পদ্ধতিতে সমস্যা আছে: ফোল্ডারগুলি ব্রাউজ করার সময় ব্যবহারকারী যদি উপরে বা পিছনে বোতাম টিপেন, Openতবে ডায়ালগের মূল বোতামটি প্রত্যাশা মতো কাজ করে না! এর ফলে আপনি পূর্বের ফোল্ডারে ফিরে যেতে পারেন! আপনি যখন ফোল্ডারগুলিকে কেবল দুটি ফোল্ডার নির্বাচন করতে বা প্রতিটি ফোল্ডারের অভ্যন্তরে কিছু ফাইল নির্বাচন করতে চান (যদি আপনি বেছে নিতে পারেন এমন কোনও ফাইল থাকে) তখন এটি কাজ করে
এস। স্পর্শান

14

অদ্ভুত যে এত উত্তর / ভোট, কিন্তু কেউ উত্তর হিসাবে নিম্নলিখিত কোডটি যুক্ত করে না:

using (var fldrDlg = new FolderBrowserDialog())
{ 
    //fldrDlg.Filter = "Png Files (*.png)|*.png";
    //fldrDlg.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv"

    if (fldrDlg.ShowDialog() == DialogResult.OK)
    {
        //fldrDlg.SelectedPath -- your result
    }
}

9
সেখানে আপনার উত্তর মধ্যে এবং @ ionica Bizau কোন পার্থক্য আছে কি উত্তর ?
চেতন মেহরা

1
লজিক একই, তবে আমার উত্তরটি অনেক ছোট you এবং আপনাকে ডায়ালগআরসাল্টের জন্য অতিরিক্ত পরিবর্তনশীল তৈরি করার দরকার নেই।
অ্যান্ড্রু

2
ইতিমধ্যে উল্লিখিত হিসাবে, এই পদ্ধতিতে কিছু বড় সমস্যা রয়েছে: এটি একটি ভয়ংকর গাছের দর্শন সংলাপ! আপনি এটিতে কোনও পাথ কপি-পেস্ট করতে পারবেন না, আপনাকে রুট ফোল্ডার থেকে একে একে ড্রিল করতে হবে এবং কোনও পছন্দসই প্যানেল নেই!
এস.স্পার্পোশন

@ এস। সরপুশন আমার পক্ষে কিছু যায় আসে না। এটি যে কোনও ডায়ালগের ব্যবহারের নমুনা। আপনি চাইলে অন্য যে কোনও ডায়ালগ ব্যবহার করতে পারেন। :)
অ্যান্ড্রু

9

আমার কাছে মনে হচ্ছে আপনি ফোল্ডার ব্রাউজার ডায়ালগের ঠিক পরে রয়েছেন


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

3
@ এমএমএক্স সম্ভবত ন্যায়সঙ্গত হওয়ার জন্য, ওপিতে "ওপেন ফাইলডায়লগ ছাড়া আমি আর কিছু ব্যবহার করতে পারি না" বলে না। আমি যখন মূলত এর উত্তর দিয়েছিলাম (সাড়ে চার বছরেরও বেশি আগে ...) তখন অনুমানটি হ'ল যে কোনও ব্যবহারকারী কোনও ফোল্ডার কীভাবে খুলতে দেয় তা ওপি ঠিক জানত না। এই উত্তরটি পোস্ট করার পরে আমি আসলে এই প্রশ্নটিতে ফিরে আসিনি তাই আমি ব্যবহারের আশেপাশে কোনও আলোচনা দেখিনি - উত্তর দেওয়ার সময় আমি এটিকে বিবেচনাও করি নি।
সাইমন হোয়াইটহেড

6

এখানে আরও একটি সমাধান রয়েছে, এর একক, সরল জিপ ফাইলে সমস্ত উত্স উপলব্ধ।

এটি ওপেনফিলডায়ালগটি অতিরিক্ত উইন্ডোজ ফ্ল্যাগ সহ উপস্থাপন করে যা এটি উইন্ডোজ 7+ ফোল্ডার নির্বাচন সংলাপের মতো কাজ করে।

ওয়েবসাইট প্রতি, এটি সর্বজনীন ডোমেন: "আপনি কী চান কোডটি নিতে এবং করতে নিখরচকের মতো লাইসেন্স নেই" "

আর্কাইভ.অর্গ লিঙ্কগুলি:


1
পুরোপুরি কাজ! এছাড়াও আপনি "ফোল্ডারসিলিটডায়ালগ। সি" - এ এই লাইনটি যুক্ত করে একাধিক ফোল্ডার নির্বাচন করতে পারেন: পাবলিক স্ট্রিং [] ফাইলের নামগুলি of get {retd ofd.FileNames; }} এবং পরিবর্তন ofd.Multiselect = সত্য; কনস্ট্রাক্টর
ম্যাকস্টার

5

কটাক্ষপাত Ookii ডায়ালগ উইন্ডোজ ফর্ম এবং WPF যথাক্রমে জন্য একটি ফোল্ডার ব্রাউজার ডায়ালগের একটি বাস্তবায়ন যা লাইব্রেরি।

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

Ookii.Dialogs.WinForms

https://github.com/augustoproiete/ookii-dialogs-winforms


Ookii.Dialogs.Wpf

https://github.com/augustoproiete/ookii-dialogs-wpf


ভাল. দ্রষ্টব্য: Ookii. ডায়ালগগুলির জন্য মাইক্রোসফ্ট। নেট ফ্রেমওয়ার্ক 4.5 বা ততোধিক প্রয়োজন। (
উইনএক্সপিতে

2
@ এস। সরপুশন - আচ্ছা আমি অনুমান করি এটি আমার উইন্ডোজ ৩.১ পিসিতে কাজ করবে না, তাই না? তবে গুরুত্ব সহকারে, 2018-তে, উইন্ডোজ এক্সপি নিয়ে কারওই চিন্তা করা উচিত নয় - এটি দীর্ঘ মৃত।
rory.ap

@ rory.ap আসলে, আমার জন্য এই সমাধানের মূল সমস্যাটি হ'ল ফোল্ডারগুলির জন্য ব্রাউজ করার সময় এটি ফাইলগুলি প্রদর্শন করে না। ব্যবহারকারীরা যখন ফোল্ডারটি নির্বাচন করতে চান তখন ফাইলগুলি (যেমন চিত্রগুলি প্রক্রিয়া করার জন্য) দেখতে সক্ষম হতে কখনও কখনও এটি খুব দরকারী!
এস। সরপুশন

-5

এটি সর্বাধিক সুস্পষ্ট এবং সোজা এগিয়ে যাওয়ার উপায় হওয়া উচিত

using (var dialog = new System.Windows.Forms.FolderBrowserDialog())
{

   System.Windows.Forms.DialogResult result = dialog.ShowDialog();

   if(result == System.Windows.Forms.DialogResult.OK)
   {
      selectedFolder = dialog.SelectedPath;
   }

}

3
FolderBrowserDialogইতিমধ্যে এখানে একাধিকবার দেওয়া হয়েছে, এবং এটির ভুল উত্তর। এটি একটি পুরানো এবং খুব অ-ব্যবহারকারী-বান্ধব ইন্টারফেস। এটি SHBrowseForFolderনীচে ব্যবহার করে এবং এমনকি ডকসটি "উইন্ডোজ ভিস্তা বা তার পরে এর জন্য, এটি ফাংশনের পরিবর্তে বিকল্পটি ব্যবহার IFileDialogকরার পরামর্শ দেওয়া হচ্ছে This এটি পিক ফোল্ডারগুলি মোডে ফাইলগুলি খুলুন ডায়ালগটি ব্যবহার করে এবং এটি পছন্দসই বাস্তবায়ন।" FOS_PICKFOLDERSSHBrowseForFolder
হিরোহতার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.