Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Thêm chương trình vào ContextMenu như thế nào ?

  1. #1
    Ngày gia nhập
    08 2009
    Bài viết
    7

    Mặc định Thêm chương trình vào ContextMenu như thế nào ?

    Tôi đang thực hiện 1 chương trình xử lý dữ liệu trên file Excel. Với mục đích tiện lợi hơn cho người sử dụng, tôi sẽ thêm chương trình của tôi vào ContextMenu (người dùng khi click chuột phải vào file Excel sẽ thấy chương trình của tôi để chọn). Việc này tương tự như khi chuột phải vào file .rar sẽ thấy chương trình winrar.
    Để thực hiện, tôi làm như sau:

    Visual C# Code:
    1.         public bool AddContextMenuItem(string Extension, string MenuName, string MenuDescription, string MenuCommand)
    2.         {
    3.             bool ret = false;
    4.             RegistryKey rkey = Registry.ClassesRoot.OpenSubKey(Extension);
    5.  
    6.             if (rkey != null)
    7.             {
    8.                 string extstring = rkey.GetValue("").ToString();
    9.  
    10.                 rkey.Close();
    11.  
    12.                 if (extstring != null)
    13.                 {
    14.                     if (extstring.Length > 0)
    15.                     {
    16.                         rkey = Registry.ClassesRoot.OpenSubKey(extstring, true);
    17.  
    18.                         if (rkey != null)
    19.                         {
    20.                             string strkey = "shell\\" + MenuName + "\\command";
    21.  
    22.                             RegistryKey subky = rkey.CreateSubKey(strkey);
    23.  
    24.                             if (subky != null)
    25.                             {
    26.                                 subky.SetValue("", MenuCommand);
    27.                                 subky.Close();
    28.                                 subky = rkey.OpenSubKey("shell\\" + MenuName, true);
    29.                                 if (subky != null)
    30.                                 {
    31.                                     subky.SetValue("", MenuDescription);
    32.                                     subky.Close();
    33.                                 }
    34.                                 ret = true;
    35.                             }
    36.                             rkey.Close();
    37.                         }
    38.                     }
    39.                 }
    40.             }
    41.  
    42.             return ret;
    43.         }

    Và gọi lại ở hàm frmMain_Load:
    Visual C# Code:
    1. AddContextMenuItem(".xls", "MyProgram", "Open with MyProgram", menuCommand);

    Kết quả, chương trình của tôi đã được đăng ký vào ContextMenu và khi rightclick vào file Excel sẽ thấy chương trình của tôi ở Menu, click chọn sẽ gọi được chương trình của tôi mở lên.

    Tuy nhiên, nội dung của file Excel cần đọc vẫn không load được vào chương trình. Mặc dầu, nếu theo cách thông thường là chọn đường dẫn đến file Excel cần đọc từ chương trình mà không thông qua thao tác rightclick chọn chương trình từ file Excel thì vẫn load được dữ liệu vào chương trình.

    Các bước trên là các bước thực hiện của tôi.

    Rất mong có ai đã từng thực hiện điều này để có thể hướng dẫn tôi thêm!

    Xin trân trọng cảm ơn!

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    An Giang
    Bài viết
    502

    Bạn tìm hiểu về Command Line để bắt sự kiện khi user click vào 1 file và lấy được đường dẫn của file đó và đưa vào chương trình của bạn.Trong file Program.cs
    Visual C# Code:
    1. static void Main(string[] a)//Truyền 1 mảng vào hàm Main và a[0] chính là đường dẫn đến file mà user click

  3. #3
    Ngày gia nhập
    08 2009
    Bài viết
    7

    Đúng như bạn nói, chương trình của tôi thiếu bắt sự kiện khi User click chọn file Excel ở hàm main.

    Như vậy, đối với trường hợp tôi cần bắt sự kiện trên file excel khi người dùng click chọn chương trình của tôi trên file excel trong hàm main() thì phải làm như thế nào?

    Tôi đã thử thực hiện như sau:

    Visual C# Code:
    1.         static void OpenExcelFileWith(string filePath)
    2.         {
    3.             try
    4.             {                
    5.                 string excelFilePath = Path.Combine(Path.GetDirectoryName(filePath), string.Format("{0} (EasyForm){1}", Path.GetFileNameWithoutExtension(filePath), Path.GetExtension(filePath)));
    6.                                
    7.                
    8.             }
    9.             catch (Exception ex)
    10.             {
    11.                 MessageBox.Show(string.Format("An error occurred: {0}", ex.Message), Program.KeyName);
    12.                 return;
    13.             }
    14.         }

    Visual C# Code:
    1.         static void Main(string[] args)
    2.         {
    3.             if (!ProcessCommand(args))
    4.             {
    5.                 OpenExcelFileWithEasyForm(args[0]);
    6.             }
    7.         }

    Nhưng có lẽ tôi còn thiếu gì đó nên vẫn chưa truyền được đường dẫn vào chương trình!

    Cảm ơn bạn.

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    An Giang
    Bài viết
    502

    Bạn Debug xem args[0] nó trả về có đúng ko rùi tính tiếp

  5. #5
    Ngày gia nhập
    08 2009
    Bài viết
    7

    Không trả về được giá trị args[0] rồi bạn à. Mình vẫn chưa truyền được giá trị của đường dẫn file Excel vào được!

  6. #6
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mặc định Thêm chương trình vào ContextMenu như thế nào ?

    Dùng args là ok, chi tiết bạn xem: http://zquanghoangz.blogspot.com/2012/02/csharp-window-context-menu.html
    Đây là cách gọi hàm
    Visual C# Code:
    1. WindowContextMenu.AddContextMenuItem(".xls", "NewMenuOption", "HoangTQ1", Application.ExecutablePath + " \"%1\"");

    Cái Application.ExecutablePath là path ứng dụng của bạn. Còn "%1" là path file bạn click lên.

    Đây là ứng dụng của bạn
    Visual C# Code:
    1.         static void Main(string[] args)
    2.         {
    3.             Application.EnableVisualStyles();
    4.             Application.SetCompatibleTextRenderingDefault(false);
    5.  
    6.             if (args != null && args.Length > 0)
    7.             {
    8.                 Application.Run(new FormDemo(args[0]));
    9.             }
    10.             else Application.Run(new FormDemo());
    11.         }

  7. #7
    Ngày gia nhập
    08 2009
    Bài viết
    7

    Xin chân thành cảm ơn bạn đã hướng dẫn!

  8. #8
    Ngày gia nhập
    03 2012
    Bài viết
    2

    Chào anh huuhung,

    Quả là một ví dụ rất hay. Em cũng có 1 ứng dụng với yêu cầu phải đăng ký ứng dụng vào ContextMenu như trên. Nhưng em gặp 1 vấn đề như sau:

    Trong project của em có 1 file "Tool.cs" chứa các xử lý dữ liệu trên file excel. Như vậy để xử lý được em làm như sau:

    Visual C# Code:
    1. static void Main(string[] args)
    2. {
    3.             Application.EnableVisualStyles();
    4.             Application.SetCompatibleTextRenderingDefault(false);
    5.  
    6.             frmMain main = new frmMain();
    7.             MainTool.frmmain = main;
    8.             Application.Run(main);
    9. }

    Thì chương trình vẫn xử lý file excel theo đúng ý đồ.

    Nhưng khi em xử lý theo hướng dẫn để truyền tham số đường dẫn vào ứng dụng như bên dưới:

    Visual C# Code:
    1.             if (args != null && args.Length > 0)
    2.             {
    3.                 Application.Run(new FormDemo(args[0]));
    4.             }
    5.             else Application.Run(new FormDemo());

    thì em ko thể nào truyền được. Và do vậy, tên chương trình của em đã được đăng ký vào ContextMenu nhưng khi chọn chương trình từ ContextMenu thì chương trình ko xử lý được file Excel.

    Rất mong nhận được hướng dẫn của anh. Cảm ơn anh.

Các đề tài tương tự

  1. Cần giúp về ContextMenu thông qua thư viện Telerik...
    Gửi bởi leminhvuong1990 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 01-10-2013, 03:19 PM
  2. tạo main MenuItem cho ContextMenu như thế nào?
    Gửi bởi Riku trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 20-04-2011, 08:41 PM
  3. thắc mắc về ContextMenu
    Gửi bởi so0_lanhlung trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 02-03-2010, 02:54 PM
  4. Cách làm ContextMeNu như ContextMenu Window Explore?
    Gửi bởi thanhlinhhue trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 11-12-2009, 10:07 AM
  5. Vấn đề với contextMenu
    Gửi bởi billle trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 16-03-2009, 10:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn