ChooseFileExtension.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using DevExpress.XtraEditors;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. namespace ExtensionsDev
  10. {
  11. public static class ChooseFileExtension
  12. {
  13. public static ButtonEdit UseChooseFile(this ButtonEdit ctrl,Action<string> onFileChanged=null)
  14. {
  15. ctrl.AllowDrop = true;
  16. ctrl.DragEnter += ctrl_DragEnter;
  17. ctrl.DragDrop += ctrl_DragDrop;
  18. ctrl.ButtonClick += Ctrl_ButtonClick;
  19. ctrl.TextChanged += (sender, e) =>
  20. {
  21. string file = (sender as Control).Text;
  22. if (File.Exists(file))
  23. {
  24. onFileChanged?.Invoke(file);
  25. }
  26. };
  27. return ctrl;
  28. }
  29. private static void Ctrl_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
  30. {
  31. var ctrl = sender as Control;
  32. XtraOpenFileDialog xtraOpenFileDialog1 = new XtraOpenFileDialog();
  33. xtraOpenFileDialog1.Multiselect = false;
  34. var currentDir = Environment.CurrentDirectory;
  35. if (xtraOpenFileDialog1.ShowDialog() == DialogResult.OK)
  36. {
  37. Environment.CurrentDirectory = currentDir;
  38. ctrl.Text = xtraOpenFileDialog1.FileName;
  39. }
  40. }
  41. private static void ctrl_DragEnter(object sender, DragEventArgs e)
  42. {
  43. if (e.Data.GetDataPresent(DataFormats.FileDrop))
  44. {
  45. e.Effect = DragDropEffects.Link;
  46. }
  47. else
  48. {
  49. e.Effect = DragDropEffects.None;
  50. }
  51. }
  52. private static void ctrl_DragDrop(object sender, DragEventArgs e)
  53. {
  54. var file = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
  55. (sender as Control).Text = file;
  56. }
  57. }
  58. }