PDA

View Full Version : ?menuItem problem



minhvdkhtn
20-02-2003, 19:05
giả sử mnuFile là một menu item cao nhất, bên trong có vài menu con như Open, Save ..
mình chẳng thấy chạy lệnh sau

Private sub mnuFile_click(...) handles mnufile.click
msgbox "AAA"
end sub

mình kiểm tra vài cái như cao nhất kiểu như Edit... mà các bạn hay thấy trên thanh menu vẫn thế.

Bộ .NET của mình bị lỗi à?

consoilangthang
20-02-2003, 19:44
không có sẵn thì tự viết. Có lẽ VB.NET nghĩ rằng các popup menu không cần (hay rất hiếm khi cần) eventhandler cho event click :D.

minhvdkhtn
21-02-2003, 00:19
đây không phải là POPUp menu đâu,

mình muốn là nếu chẳng hạn như Clipboard không có gì thì
menu con Paste của menu Edit bị disable, và mình muốn bật /tắt các menu con này trong sự kiện click của menu Edit (giống trong Word)

White_Rose
21-02-2003, 02:06
Thì thêm lệnh mnuFile.Enabled = false/true tuỳ thuộc vào System.Windows.Forms.Clipboard.GetDataObject() có trả về object có kiểu là gì. Em thấy nó vẫn chạy đáy chứ?

consoilangthang
21-02-2003, 12:39
Bài viết được gửi bởi minhvdkhtn
đây không phải là POPUp menu đâu,

mình muốn là nếu chẳng hạn như Clipboard không có gì thì
menu con Paste của menu Edit bị disable, và mình muốn bật /tắt các menu con này trong sự kiện click của menu Edit (giống trong Word)

bạn sử dụng event PopUp chứ không phải Click cho các submenu (có chứa các menuitems).

bạn làm thử rồi feedback lại nha.

QuanN
21-02-2003, 23:46
Không biết VB.NET biên như thế nào, nhưng trong C# thì:


void MenuEditOnPopup(object obj, EventArgs ea)
{
miEditUndo.Enabled = txtbox.CanUndo;
miEditRedo.Enabled = txtbox.CanRedo;

miEditCut.Enabled =
miEditCopy.Enabled =
miEditDelete.Enabled = (txtbox.SelectionLength > 0);

miEditPaste.Enabled =
Clipboard.GetDataObject().GetDataPresent(typeof(st ring));
}

minhvdkhtn
22-02-2003, 01:05
thanks for all help

Đoạn code của QuanN rất đúng ý của mình. Nhưng có lẽ là bạn viết cho menu popup của Textbox, nhưng mình muốn cái tương tự cho menu Edit bình thường trên form.

Mình đã viết sự kiện Click cho nó, với đoạn code bên trong tương tự nhưng không được vì sự kiện Click không kích hoạt với loại Menu như vậy (toplevel menu như File, Edit, View của IE 6 mà bạn đang thấy), còn các menu con như Save, Paste ... như sự kiện naỳ vẫn chạy bình thường. Mọi người thử viết sự kiện click cho một menu và disable mọi menu con của nó xem có được không? Nhớ thông báo kết quả .

Sự kiện PopUp của soilangthang cũng không thấy chạy.

Cuối cùng, mình thử sự kiện Select của nó và thành công. Cám ơn chúa... và cám ơn mọi người again.

QuanN
22-02-2003, 05:18
Sự kiện Popup rất thích hợp với top-level menu item (những item thường có submenu) như File, Edit..., còn các menu con như Save, Paste thì, như bạn đã tìm ra, Select có lẽ hợp hơn. Bạn có thể tham khảo mã nguồn của VietPad.NET (http://vietpad.sf.net) để có thí dụ trong thực tiễn.

minhvdkhtn
22-02-2003, 19:34
mình thấy lạ là sao sự kiện Click vừa quen thuộc, vừa có vẻ đúng nghĩa (click vào menu File,.. ) mà không chạy mà lại là các sự kiện như Select hay PopUp

consoilangthang
22-02-2003, 23:47
Click raised khi menuitem nhận click
Select raised khi menuitem nhận hover (thường dùng để update menuitem description lên statusbar như một kiểu quick help)
PopUp raised trước khi các menuitems của menuitem được hiển thị.

Theo logic thì event PopUp hợp lý hơn. Nhưng nếu như bạn nói, nó không chạy thì biết làm sao được.

Click rõ ràng không "đúng nghĩa" đâu.

minhvdkhtn
23-02-2003, 00:46
mình đã tham khảo MSDN và thấy dùng PopUp là thích hợp nhất, tất nhiên là nó đã chạy được.

Nhưng còn cái vụ Click không chạy thì do chương trình hay do ông Bill đây.

consoilangthang
23-02-2003, 11:00
...Sự kiện PopUp của soilangthang cũng không thấy chạy...

...mình đã tham khảo MSDN và thấy dùng PopUp là thích hợp nhất, tất nhiên là nó đã chạy được...

bạn mâu thuẫn với chính bản thân cơ à ? Lần sau trước khi ra nhận định gì, bạn nên xem xét kỹ lại, mất công làm rối người khác khi muốn giúp bạn.

Click không chạy có lẽ do các menuitems khi thành popup (có submenuitems) thì chỉ raise event PopUp chứ không raise event Click nữa. Và điều này, nếu có thật, cũng là điều hợp lý.

hueduongit
25-02-2003, 09:46
miEditUndo.Enabled = txtbox.CanUndo;
miEditRedo.Enabled = txtbox.CanRedo;

Sao mình không thấy <b>'txtbox.CanRedo'</b> nơi!?

QuanN
26-02-2003, 00:17
Bài viết được gửi bởi hueduongit
miEditUndo.Enabled = txtbox.CanUndo;
miEditRedo.Enabled = txtbox.CanRedo;

Sao mình không thấy <b>'txtbox.CanRedo'</b> nơi!?
RichTextBox mới có property đó. Thử download và đọc source của VietPad.NET (http://vietpad.sf.net).

minhvdkhtn
26-02-2003, 00:19
đây là cái RTB